Heim > Artikel > Web-Frontend > Zusammenfassung der grundlegenden JavaScript-Kenntnisse (9) Hervorragende Erklärung des Bereichs und der Bereichskette
Dieses Mal bringe ich Ihnen eine Zusammenfassung der Grundkenntnisse von JavaScript. Es gibt insgesamt elf Wissenspunkte. Umfang und Umfangskette. Werfen wir einen Blick darauf.
Ausarbeitung des Geltungsbereichs
[[Geltungsbereich]]: Jede JavaScript-Funktion ist ein Objekt. Es gibt einige Eigenschaften im Objekt, auf die wir zugreifen können, auf andere 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 einen Bereich nennen, der eine Sammlung von Laufzeitkontexten speichert.
Scope-Kette: Der in [[scope]] gespeicherte Ausführungskontext. Eine Sammlung von Objekten. Diese Sammlung ist in einer Kette verknüpft. Wir nennen dieses Kettenglied eine Bereichskette
Laufzeitkontext: Wenn eine Funktion ausgeführt wird, wird ein internes sogenanntes Ausführungsobjekt erstellt. Ein Ausführungskontext definiert die Umgebung, in der eine Funktion ausgeführt wird. Der entsprechende Ausführungskontext ist bei jeder Ausführung einer Funktion eindeutig. Daher führt der mehrmalige Aufruf einer Funktion zur Erstellung mehrerer Ausführungskontexte Ausführungskontext wird zerstört
Suchvariablen: Suche von oben in der Bereichskette nach unten
function a() { function b(){ var b = 234; } var a = 123; b(); }var glob = 100; a();
Schauen wir uns zunächst die obige Funktion an. Dies ist eine Gesamtfunktion Im globalen Bereich gibt es unten die Variable glob, und dann gibt es die Ausführung von a; Schritt 1: Was das System zunächst sieht, muss die Definition von a sein. Es gibt diesen [[Umfang]] .
a / [[scope]] scope指向scope chain scope chain scope指向这里
0 Die 0 an dieser Position zeigt auf GO
Globales Objekt
0 zeigt auf Die Tabelle ist
this window window (object) document (object) a (function) glob 100 [[scope]]里面有这个全局的执行期上下文,然后a被执行了,a被执行,a产生的这个AO,把自己的AO存到作用域链的最顶端,形成一个新的作用域链,现在的a的[[scope]]和刚才的那个[[scope]]不一样了 a / [[scope]] scope指向scope chain scope chain scope指向这里
0 Die 0 an dieser Position zeigt auf AO
1 Die 0 an dieser Position zeigt auf GO
Aktivierungsobjekt
0 Punkte auf diese Tabelle
1 Punkte auf diese Tabellethis window arguents [] a 123 b (function) Global ObjectDer einzige Unterschied besteht darin, dass der darin gespeicherte Wert immer noch derselbe ist greifen auf den [[Bereich]] von a zu, der aus dem [[Bereich] von a“ stammt. Diese Bibliothek speichert eine Bereichskette mit verschiedenen darin hängenden Variablen Dabei suche ich von oben nach unten.
this window window (object) document (object) a (function) glob 100
Dann führt die Ausführung von a dazu, dass b definiert wird, nachdem b ausgeführt wurde. Wenn b definiert ist, gibt es einen natürlichen [[Bereich]], und es gibt einen in [[Bereich ]]. Es sollte eine Bereichskette haben, aber die Bereichskette unterscheidet sich von der von a. Wenn a definiert ist, befindet es sich im globalen Bereich und die einzigen Attribute, auf die zugegriffen werden kann, sind sein eigenes AO und das globale GO . Aber b ist in einer Funktion definiert, sodass der [[Bereich]] von b nicht nur auf seinen eigenen AO zugreifen kann, sondern auch auf den AO von a, und der globale GO
Bereich zeigt auf die Bereichsketteb / [[scope]]
Scope-Kette
Scope-Punkte hier
0 Die 0 an dieser Position zeigt auf sich selbst
1 Die 1 an dieser Position zeigt auf den AO eines
2 Die 0 an dieser Position zeigt auf GO
Aktivierungsobjekt
0 Punkte auf diese Tabelle
1 Punkte auf diese Tabellethis window arguents [] b 234; Activation Object1 Punkte auf diese Tabelle
this window arguents [] a 123 b (function) Global ObjectScope Destroy
this window window (object) document (object) a (function) glob 100
Nachdem b ausgeführt wurde, wird sein eigenes ao zerstört, in den Definitionszustand zurückgekehrt und auf die nächste Ausführung gewartet
Da b der letzte Satz der Funktion a ist, also nach der Ausführung von b, a wird ebenfalls zerstört, sodass der [[Bereich]] von b ebenfalls zerstört wird, in den Definitionszustand zurückkehrt und auf die nächste Ausführung wartet
, sodass die externe Funktion nicht auf interne Funktion//例子function a() { function b() { function c(){ } c(); } b(); } a(); a defined a.[[scope]] --> 0:GOa doing a.[[scope]] --> 0:a的AO 1:GO b defined b.[[scope]] --> 0:a的AO 1:GOb doing b.[[scope]] --> 0:自己的AO 1:a的AO 2:GO c defined c.[[scope]] --> 0:a的AO 1:c的AO 2:GOc doing c.[[scope]] --> 0:自己的AO 1:b的AO 2:a的AO 3:GOAttribute und WerteVerwandte Lektüre:
Zusammenfassung der grundlegenden JavaScript-Kenntnisse (6) Funktionen, anfänglicher Umfang (Teil 2)
Grundlagen Zusammenfassung der JavaScript-Kenntnisse (7) Rekursion
Zusammenfassung der grundlegenden JavaScript-Kenntnisse (8) Ausführungsprozess vor der Kompilierung
Das obige ist der detaillierte Inhalt vonZusammenfassung der grundlegenden JavaScript-Kenntnisse (9) Hervorragende Erklärung des Bereichs und der Bereichskette. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!