[[Geltungsbereich]]:Jede Javascript-Funktion ist ein Objekt, und das Objekt enthält einige Attribute dass wir darauf zugreifen können, auf einige jedoch nicht. Diese Eigenschaften sind nur für die JavaScript-Engine zugänglich, und [[scope]] ist eine davon.
[[scope]] bezieht sich auf das, was wir Scope nennen, der eine Sammlung von Laufzeitkontexten speichert. Laufzeitkontext: Wenn eine Funktion ausgeführt wird, wird ein internes Objekt namens Ausführungskontext erstellt, der die Umgebung definiert, in der eine Funktion ausgeführt wird. Der entsprechende Ausführungskontext ist also bei jeder Ausführung der Funktion eindeutig führt zur Erstellung mehrerer Ausführungskontexte. Wenn die Funktion die Ausführung abschließt, wird der von ihr generierte Ausführungskontext zerstört.
Bereichskette: Eine Sammlung von Ausführungskontextobjekten, die in [[Bereich]] gespeichert sind. Diese Sammlung ist in einer Kette verbunden. Wir nennen dieses Kettenglied einen Bereich.
function a(){ function b(){ function c(){ } } }
a definiert a.[[scope]] ===> 0: GO
a doing a.[[scope]] ===> 0: aAO
1: GO
b definiert b.[[scope]] ===> 0: bAO
1: aAO
2:GO
c definiert c.[[scope]] ===> 0 : bAO
c definiert c.[[scope]] ===> cAO
1 :bAO
🎜>
AbschlussWenn die interne Funktion gespeichert wird Außerhalb wird ein Schließungspaket generiert, das den ursprünglichen Umfang verursacht Die Kette kann nicht freigegeben werden, was zu Speicherverlusten führt.function a(){ function b(){ var bbb = 234; console.log(aaa); } var aaa = 123; return b; } var glob = 100; var demo = a(); demo();
Eine Funktion gibt die B-Funktion zurück, bevor sie zerstört wird, sodass die von der B-Funktion generierte Bereichskette nicht zerstört wird und die B-Funktion zu diesem Zeitpunkt nicht ausgeführt wird .log(aaa) wird unten aufgerufen. Wenn die b-Funktion ausgeführt wird, gibt es in bAO keine Variable aaa, daher kehrt es zum übergeordneten aAO zurück und findet aaa = 123, sodass das Ergebnis 123 ist.
Einführung der
SofortausführungsfunktionSofortausführungsfunktion für die Funktion der Initialisierungsfunktion, 1 (function(){}() ); (w3c empfiehlt die erste) 2. (function(){})();Nur Ausdrücke können symbolisch ausgeführt werden
Symbolisch sofort ausgeführt Funktionsausdruck, die Funktion kann nicht erneut verwendet werden Die Funktion kann durch Pluszeichen, Minuszeichen usw. in einen Funktionsausdruck umgewandelt werden. +/-/! function test(){ console.log('a'); }function test(){ var arr = []; for(var i = 0;i < 10;i ++){ (function (j){ arr[j] = function(){ document.write(j+' '); } }(i)); } return arr; } var myarr = test(); for(var i = 0;i < 10;i ++){ myarr[i](); }
Verwandte Artikel:
Detaillierte Erläuterung von JavaScript-Bereichen und -Abschlüssen
Bereichsketten und -Abschlüsse in JavaScript
Ähnliche Videos:JS Advanced Scope – Yan Shiba Javascript Advanced Video Tutorial
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung von Umfang + Abschluss in Javascript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!