Voici l'exemple sur lequel je veux m'éclairer (Quelque chose qui ne fonctionne pas réellement).Étendre la chaîne en Javascript et appeler la fonction imbriquée dans la portée globale
var myVar = 2;
function a(){
var myVar = 2;
function b(){
console.log(myVar);
}
};
a();
b();
Ceci sera affiché dans la console: Uncaught ReferenceError: b n'est pas défini.
Comme vous pouvez le voir, j'ai une fonction nommée un avec une fonction imbriquée appelée b.
Au début, je pensais que je pouvais invoquer b en dehors un et le faire fonctionner normalement. Je pensais que cela fonctionnerait parce que j'appelle d'abord la fonction a.
En faisant que j'avais à l'esprit le fait que la fonction serait mise sur la pile d'exécution et pendant sa phase de création de la fonction b définie à l'intérieur serait fixé dans la mémoire. Comme c'est en mémoire, j'ai pensé que je pourrais alors exécuter ceci en dehors de la fonction. Ce qui ne marche évidemment pas.
Donc, ma conclusion est la fonction b est en effet mis en mémoire pendant la phase de création du une fonction mais une fois la fonction a fini d'exécuter, une fois qu'il est sauté de la pile d'exécution, le b La fonction est supprimée de la mémoire en même temps.
L'appeler ainsi (je veux dire la fonction b) dans la portée globale est impossible.
Ai-je raison à ce sujet?
JavaScript a [* lexical scope *] (https://en.wikipedia.org/wiki/Scope_%28computer_science%29#Lexical_scoping) et cela s'applique aussi aux fonctions. –