Wir alle wissen, dass in einer Funktion definierte lokale Variablen immer innerhalb des Funktionskörpers definiert sind, in dem sie deklariert ist, und seiner verschachtelten Funktionen, und dass es in der Bereichskette der Funktion immer ein Objekt geben wird, das auf das globale Objekt zeigt. damit Funktionen auf globale Variablen zugreifen können.
var ga = 'global'; var func = function() { var la = 'local'; return function() { return function() { return function() { alert(la);alert(ga); } } } } a = func(); a()()();// 弹出 local 和 global
Wenn also die extern definierte Funktion A von Funktion B im Funktionskörper aufgerufen wird, kann A dann auf die in B definierten lokalen Variablen zugreifen? Die Antwort ist nein, modifizieren Sie das obige Beispiel leicht wie folgt
var ga = 'global'; function repeat() { alert(la); } var func = function() { var la = 'local'; alert(1); repeat(); alert(2); }; func();
Das obige Operationsergebnis ist, dass beim Aufruf von „repeat“ nur 1 angezeigt wird. Der js-Interpreter meldet einen Fehler, da er auf eine undefinierte Variable zugreift und das Programm unterbricht.
Der Grund dafür ist, dass die Funktion eine Bereichskette speichert, wenn sie extern definiert wird. Es gibt keine lokale Variable namens la in ihrem Bereich. Wenn wir im globalen Bereich weitersuchen, können wir sie immer noch nicht finden la, also wird ein Fehler gemeldet.
Es gibt also einen großen Unterschied zwischen verschachtelten Funktionen und verschachtelten Aufrufen externer Funktionen innerhalb von Funktionen.
Ich habe gestern nachgedacht, als ich eine Frage beantwortet habe http://www.jb51.net/article/78958.htm Obwohl ich das Konzept verstehe, warum wollte ich immer „repeat inside“ aufrufen? Funktion? Ich kann nicht auf die lokalen Variablen der Funktion zugreifen, die ihn aufruft. Ich habe die Referenzmaterialien heute noch einmal überprüft und es selbst mit dem Code getestet. Ich hoffe, dieser Artikel kann Freunden helfen, die die gleiche Verwirrung haben.