Nous savons tous que les variables locales définies dans une fonction sont toujours définies dans le corps de la fonction dans laquelle elle est déclarée et ses fonctions imbriquées, et il y aura toujours un objet pointant vers l'objet global dans la chaîne de portée de la fonction, afin que les fonctions puissent accéder aux variables globales.
var ga = 'global'; var func = function() { var la = 'local'; return function() { return function() { return function() { alert(la);alert(ga); } } } } a = func(); a()()();// 弹出 local 和 global
Ainsi, lorsque la fonction A définie en externe est appelée par la fonction B dans le corps de la fonction, A peut-il accéder aux variables locales définies dans B ? La réponse est non, modifiez légèrement l'exemple ci-dessus comme suit
var ga = 'global'; function repeat() { alert(la); } var func = function() { var la = 'local'; alert(1); repeat(); alert(2); }; func();
Le résultat de l'opération ci-dessus est que seulement 1 apparaît. Lorsque la répétition est appelée, l'interpréteur js signale une erreur car il accède à une variable non définie et interrompt le programme.
La raison est que la fonction enregistre une chaîne de portée lorsqu'elle est définie. La fonction de répétition est définie en externe. Il n'y a pas de variable locale appelée la dans sa portée. Si nous continuons à chercher dans la portée globale, nous ne trouvons toujours pas. la, donc une erreur sera signalée.
Il y a donc une grande différence entre les fonctions imbriquées et les appels imbriqués à des fonctions externes au sein des fonctions.
Je pensais hier quand j'ai répondu à une question http://www.jb51.net/article/78958.htm Bien que je comprenne le concept, pourquoi ai-je toujours voulu appeler en répétition à l'intérieur du. fonction ? Je ne peux pas accéder aux variables locales de la fonction qui l'appelle. J'ai vérifié à nouveau les documents de référence aujourd'hui et je l'ai testé moi-même avec le code. J'espère que cet article pourra aider des amis qui ont la même confusion.