Quelles variables sont disponibles ?
La fonction makeWorker
ci-dessous crée une autre fonction et la renvoie. Cette nouvelle fonction peut être appelée ailleurs.
Aura-t-elle accès aux variables externes depuis son lieu de création, ou depuis le lieu d’invocation, ou les deux ?
function makeWorker() {
let name = "Pete";
return function() {
alert(name);
};
}
let name = "John";
// créons une fonction
let work = makeWorker();
// appelons-la
work(); // que va-t-elle afficher ?
Quelle valeur va-t-elle afficher ? “Pete” ou “John” ?
La réponse est : Pete.
La fonction work()
dans le code ci-dessous obtient name
du lieu de son origine via la référence d’environnement lexical externe :
Donc, le résultat est "Pete"
ici.
Mais s’il n’y avait pas de let name
dans makeWorker()
, alors la recherche irait à l’extérieur et prendrait la variable globale comme nous pouvons le voir dans la chaîne ci-dessus. Dans ce cas, le résultat serait "John"
.