Die Daten eines Ausführungskontexts (Variablen, Funktionsdeklarationen und Funktionsparameter) werden als Eigenschaften im Variablenobjekt gespeichert. Das Variablenobjekt wird bei jedem Eintritt in den Kontext erstellt und mit einem Anfangswert gefüllt. Der Wert wird während der Codeausführungsphase aktualisiert.
Dieses Kapitel ist der Erörterung weiterer Details gewidmet, die in direktem Zusammenhang mit dem Ausführungskontext stehen. Dieses Mal werden wir ein Thema erwähnen – die Bereichskette.
Wenn Sie die wichtigsten Punkte kurz beschreiben und zeigen möchten, beziehen sich Scope-Ketten hauptsächlich auf innere Funktionen.
Wir wissen, dass ECMAScript die Erstellung interner Funktionen ermöglicht, und wir können diese Funktionen sogar von der übergeordneten Funktion zurückgeben.
var x = 10; function foo() { var y = 20; function bar() { alert(x + y); } return bar; } foo()(); // 30
Auf diese Weise ist es offensichtlich, dass jeder Kontext sein eigenes Variablenobjekt hat: Für den globalen Kontext ist es das globale Objekt selbst, für Funktionen ist es das aktive Objekt.
Die Bereichskette ist lediglich die Liste aller Variablenobjekte (einschließlich übergeordneter Variablenobjekte) im inneren Kontext. Diese Kette wird für Variablenabfragen verwendet. Das heißt, im obigen Beispiel umfasst die Bereichskette des „bar“-Kontexts AO(bar), AO(foo) und VO(global).
Aber schauen wir uns dieses Problem genauer an.
Beginnen wir mit der Definition und besprechen wir die Beispiele genauer.
Eine Bereichskette ist einem Ausführungskontext zugeordnet, und die Kette von Variablenobjekten wird für die Variablensuche bei der Identifikatorauflösung verwendet.
Die Bereichskette des Funktionskontexts wird erstellt, wenn die Funktion aufgerufen wird, einschließlich des aktiven Objekts und des [[scope]]-Attributs innerhalb dieser Funktion. Im Folgenden werden wir das [[scope]]-Attribut einer Funktion ausführlicher besprechen.
wird im Kontext wie folgt dargestellt:
activeExecutionContext = { VO: {...}, // or AO this: thisValue, Scope: [ // Scope chain // 所有变量对象的列表 // for identifiers lookup ] };
Sein Geltungsbereich ist wie folgt definiert:
Scope = AO + [[Scope]]
Diesen Vereinigungs- und Identifikator-Auflösungsprozess werden wir weiter unten besprechen, Dies hängt mit dem Lebenszyklus der Funktion zusammen.
Das Obige ist der Inhalt der JavaScript-Bereichskette: Definition des Bereichskette: Inhalt der Bereichskette: Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn). !