Dieser Artikel führt Sie Schritt für Schritt zu einem umfassenden Verständnis des Ausführungskontexts in JavaScript. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.
Nur wenn wir den Ausführungskontext verstehen, können wir die JavaScript-Sprache selbst besser verstehen, z. B. Variablenförderung, Umfang, Schließung usw.
Der Ausführungskontext ist die Ausführungsumgebung des aktuellen Codes .
Globaler Ausführungskontext: Die globale Ausführungsumgebung ist die peripherste Ausführungsumgebung. Das globale Objekt im Browser ist ein Fenster, das auf dieses Objekt verweist
Funktionsausführungskontext: Es kann unzählige geben, sie werden erstellt, wenn die Funktion aufgerufen wird. Jeder Funktionsaufruf erstellt einen neuen Ausführungskontext.
Bewertungsausführungskontext, selten verwendet.
Variables Objekt (VO): Jeder Ausführungsumgebung ist ein Variablenobjekt zugeordnet, das in der Umgebung definiert ist. Alle Variablen und Funktionen werden darin gespeichert dieses Objekt. Obwohl der von uns geschriebene Code keinen Zugriff auf dieses Objekt hat, verwendet der Parser es im Hintergrund bei der Verarbeitung der Daten.
Verwenden Sie im Funktionskontext das Aktivierungsobjekt (AO), um variable Objekte darzustellen. Aktive Objekte und variable Objekte sind eigentlich dasselbe. Nur beim Betreten einer Ausführungsumgebung wird das variable Objekt dieses Ausführungskontexts aktiviert. Zu diesem Zeitpunkt wird es als aktives Objekt (AO) bezeichnet zugegriffen werden kann.
Bereichskette: Wenn Code in einer Umgebung ausgeführt wird, wird eine Bereichskette variabler Objekte erstellt. Der Zweck der Bereichskette besteht darin, einen geordneten Zugriff auf alle Variablen und Funktionen sicherzustellen, auf die die Ausführungsumgebung Zugriff hat.
dieser
function getName(name) { var b = 2; function foo() {}; var bar = function() {}; } getName('lucystar')
AO = { arguments: { 0: 'lucystar', length: 1 }, name: 'lucystar', b: undefined, foo: reference to function foo(){}, bar: undefined }
Das obige Beispiel beinhaltet Variablenförderung und Funktionsförderung, die zuvor
von waren JS Das zugrunde liegende Verständnis von var, let, constwurde ebenfalls in diesem Artikel vorgestellt
1.2 Erstellen Sie eine Bereichskette
let a = 'javascript'; function foo() { console.log('foo'); bar(); } function bar() { console.log('bar'); } foo();
Wenn der Funktionsaufruf foo()
auftritt, erstellt die JavaScript-Engine einen Foo-Funktionsausführungskontext und schiebt ihn an die Spitze des aktuellen Ausführungsstapels.
bar()
innerhalb der Funktion foo()
aufgerufen wird, erstellt die JavaScript-Engine einen Ausführungskontext für die Bar-Funktion und schiebt ihn auf die aktuelle Ausführung Stapel von oben. foo()
ist. foo()
函数调用时, JavaScript 引擎创建了一个 foo 函数执行上下文并把它压入到当前执行栈的顶部。
当从 foo()
函数内部调用 bar()
函数时,JavaScript 引擎创建了一个 bar 函数执行上下文并把它压入到当前执行栈的顶部。
当函数 bar 执行完毕,它的执行上下文会从当前栈中弹出,控制流程到达下一个执行上下文,即 foo()
Warum werden Basisdatentypen auf dem Stapel und Referenzdatentypen auf dem Heap gespeichert? Die JavaScript-Engine muss den Stapel verwenden, um den Status des Kontexts während der Programmausführung aufrechtzuerhalten. Wenn der Stapelspeicher groß ist, werden alle Daten im Stapelspeicher gespeichert, was sich auf die Effizienz des Kontextwechsels und damit auf die Ausführungseffizienz auswirkt das gesamte Programm.
Weitere Kenntnisse zum Thema Programmierung finden Sie unter: Programmiervideos! !
Das obige ist der detaillierte Inhalt vonBringen Sie Ihnen Schritt für Schritt bei, den Ausführungskontext in JS zu verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!