retour au cours

Quelles variables sont disponibles ?

importance: 5

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".