2010-11-22 8 views

Répondre

4

Non, cela ne fonctionnera pas. Ce qui importe est où (lexicalement) une fonction est défini, pas où c'est invoqué.

au moment de déterminer ce que (le cas échéant) « c » désigne, la langue semble dans la portée locale, puis dans le champ suivant à en fonction de la définition de la fonction. Ainsi, si cette invocation de "a" a eu lieu dans une autre fonction que avait avait son propre "c" local, alors cette valeur serait ce que l'alerte a montré.

function b() { 
    var c = 'banana'; 
    a(function() { 
    alert(c); 
    }); 
} 

b(); // alert will show "banana" 
2

Non, ce n'est pas possible. Le champ dans lequel vous déclarez votre fonction anonyme n'a pas accès à cette variable c - en fait, rien, mais a aura jamais accès à c.

0

Comme d'autres l'ont dit, ce n'est pas possible. Vous pouvez

1. Déclarer l'extérieur c variables de la portée de la fonction

2. passer un argument à f:

function a(f) { var c = { name: 'test' }; f(c) }; 
a(function(o) { alert(o.name) }) 
2

Non cela ne fonctionnera pas parce que la variable c est défini dans la fonction et n'est pas disponible en dehors de la fonction. Une option cependant est de passer la variable c dans la fonction fournie à a

function a(f) { 
    var c = 'test'; 
    f(c); 
} 

a(function(c) { 
    alert(c); //at this point, c should = "test" 
});