


Detaillierte Erläuterung der Verwendung des Ausführungskontexts auf Seiten
Dieses Mal werde ich Ihnen die Verwendung des Ausführungskontexts auf der Seite ausführlich erläutern. Was sind die Vorsichtsmaßnahmen zum Ausführungskontext auf der Seite? .
Wenn der JavaScript-Code einen ausführbaren Code ausführt, wird der entsprechende Ausführungskontext erstellt und der Kontext in den Kontextstapel verschoben.
Kontext enthält die folgenden 3 wichtigen Attribute:
name | - | |
---|---|---|
变量对象(VO, variable object) | 当前函数定义的变量、函数、参数 | |
作用域链(Scope chain) | 源代码定义时形成的作用域链 | |
this |
Kontext ist ein abstraktes Konzept. Um das Verständnis zu erleichtern, gehen wir davon aus, dass der Kontext ein Objekt ist und drei Attribute enthält: VO, Scope und dies:
function foo (c) { let a = 1 let b = function () {} } // foo函数的上下文 fooContext = { VO: { arguments: { // 实参 c: undefind, length: 0 }, a: 1, // 变量 b: reference to function (){} // 函数 }, Scope: [VO, globalContext.VO], // 作用域链 this: undefind // 非严格模式下为 this }
Der Kontext ist also die Umgebung oder abhängige Ressource wenn die Funktion ausgeführt wird. Eine Sammlung, die bestimmt, welche Variablen und Funktionen abgerufen werden können, wenn die Funktion ausgeführt wird.
Ausführungskontext (EC): Wenn sich die Funktion im Ausführungsstatus befindet, wird der Kontext der Funktion als Ausführungskontext bezeichnet. Wenn sich die Funktion gleichzeitig im Nichtausführungsstatus befindet, ist dies der Fall der (gewöhnliche) Kontext. 执行上下文
ist also nur ein anderer Zustand von 上下文
, und es gibt im Wesentlichen keinen Unterschied zwischen ihnen.
Kontextstapel
Der Kontextstapel wird auch als Ausführungsstapel (ECS) bezeichnet. Der JavaScript-Parser selbst im Browser ist Single-Threaded, das heißt, er kann nur einen Kontext und den entsprechenden verarbeiten Codesegment gleichzeitig, sodass die JavaScript-Parsing-Engine den Kontextstapel verwendet, um den Kontext zu verwalten. Alle Kontexte werden nach ihrer Erstellung in der Kontextstapelwarteschlange gespeichert. Das untere Ende des Stapels ist der globale Kontext und das obere Ende des Stapels ist der aktuell ausgeführte Kontext.
Ein Kontext ist eine Ausführungseinheit, und JavaScript verwaltet Ausführungseinheiten in einem Stapel. Wenn die Seite initialisiert wird, wird der globale Kontext zuerst an den unteren Rand des Stapels verschoben. Wenn die ausführbare Funktion dann gemäß den Regeln ausgeführt wird, wird der Kontext der Funktion nach 上下文栈
verschoben die Ressourcen, die für die Ausführung der Funktion erforderlich sind (Variablenobjekte, Bereichsketten usw.), diese Ressourcen werden Ausdrücken bereitgestellt, wenn die Funktion ausgeführt wird.
Der Ausführungskontext kann als die Umgebung verstanden werden, in der die Funktion ausgeführt wird. Gleichzeitig ist der Ausführungskontext auch ein unsichtbares Konzept.
Es gibt 3 Ausführungsumgebungen in JavaScript:
Globale Umgebung:
window
im Browser,global
in der Knotenumgebung, wenn die Seite initialisiert wird. Wann Wenn die Funktion aufgerufen und ausgeführt wird, wird der globale Kontext in den Kontextstapel verschoben.Funktionsumgebung: Wenn die Funktion aufgerufen und ausgeführt wird, werden die Ressourcen der Funktion gesammelt. Der Kontext wird erstellt und in den Kontextstapel verschoben.
Bewertungsumgebung, veraltet
Eine laufende Umgebung entspricht einem Kontext. Der Kontext an der Spitze des Stapels wird nach seiner Ausführung automatisch vom Stapel entfernt und dann nach unten verschoben, bis alle Kontexte vollständig ausgeführt wurden. Schließlich wird der globale Kontext zerstört, wenn der Browser geschlossen wird. Zum leichteren Verständnis geben wir ein Beispiel:
let i = 0 function foo () { i++ console.log(i, 'foo') } function too () { i++ console.log(i, 'too') foo() } function don () { i++ console.log(i, 'don') too() } don() // 1 "don" // 2 "too" // 3 "foo"
Die Logik des obigen Codes besteht darin, zuerst don() und dann too(), foo() auszuführen. Der Kontextstapel beim Ausführen von foo() sieht folgendermaßen aus:
Wir gehen davon aus, dass der Kontextstapel ein Array ist: ECStack
:
ECStack = []
Javascript wird geladen Nach Abschluss muss zunächst der globale Code analysiert und ausgeführt werden, sodass der globale Kontext während der Initialisierung in den Kontextstapel verschoben wird, den wir zur Darstellung mit globalContext
verwenden.
ECStack = [ globalContext ]
Der globale Bereich bleibt während der gesamten Codeausführungsphase bestehen, bis die Seite ECStack
leer ist und globalContext
zerstört wird.
Wenn der globale Kontext erstellt wird, werden Vorgänge wie Variablenheraufstufung und Variablenobjektgenerierung ausgeführt, und dann wird der ausführbare Code (Funktionen, Ausdrücke) im aktuellen Kontext ausgeführt. Wenn ein Funktionsaufruf auftritt, wird der Kontext der Funktion zum Kontextstapel push
hinzugefügt.
function foo () { console.log('foo') } function too () { console.log('too') foo() } function don () { too() } don()
Die Ausführungslogik kann wie folgt verstanden werden:
zu don() ausführen, den internen Code der Don-Funktion analysieren
-
um don zu generieren Der Kontext der Funktion (vo, Scope-Kette, this)
Den Kontext von don an ECStack übertragen
Führe den Ausdruck im Don-Funktionskörper aus
Execute too()
Generiere den Kontext der Too-Funktion (vo, Scope-Kette, this)
-
Den Kontext von too in ECStack verschieben
...
Der Javascript-Parser wird fortgesetzt um zu rekursieren, bis die Funktion „foo“ ausgeführt wird … Der Kontext der Funktion „foo“ wird gelöscht … und kehrt dann zum Kontext globalContext
zurück … wartet … und führt die Rückruffunktion aus, wenn die Rückruffunktion des Ereignisses ist aktiviert. (Dies betrifft den Ausführungsmechanismus und die Ereignisschleife von Javascript. Bitte beachten Sie die folgenden Artikel ^_^)
执行逻辑的伪代码如下:
// 伪代码 // don() ECStack.push(<don> functionContext); // 在don中调用了too, push too的上下文到上下文栈里 ECStack.push(<fun2> functionContext); // 在too中调用了foo, push foo的上下文到上下文栈里 ECStack.push(<fun3> functionContext); // foo执行完毕, 弹出上下文 ECStack.pop(); // too执行完毕, 弹出上下文 ECStack.pop(); // don执行完毕, 弹出上下文 ECStack.pop(); // 非全局上下文执行完毕被弹出后会一直停留在全局上下文里,直至页面关闭</fun3></fun2></don>
需要注意的是,上下文与作用域(scope)是不同的概念。上下文是一个运行时概念,浏览器运行后执行 js 代码,将不同的上下文加入上下文栈中,顶层的上下文对应的代码块执行完后又将该上下文销毁。 而作用域是一个静态概念,根据所在代码片段的位置及词法关系确立的,不管浏览器运行与否,源代码的作用域关系、变量的访问权限依然不变。
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung des Ausführungskontexts auf Seiten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen





CrystalDiskMark ist ein kleines HDD-Benchmark-Tool für Festplatten, das schnell sequentielle und zufällige Lese-/Schreibgeschwindigkeiten misst. Lassen Sie sich als Nächstes vom Redakteur CrystalDiskMark und die Verwendung von CrystalDiskMark vorstellen ). Zufällige I/O-Leistung. Es ist eine kostenlose Windows-Anwendung und bietet eine benutzerfreundliche Oberfläche und verschiedene Testmodi zur Bewertung verschiedener Aspekte der Festplattenleistung. Sie wird häufig in Hardware-Reviews verwendet

foobar2000 ist eine Software, die Ihnen jederzeit Musik aller Art mit verlustfreier Klangqualität bietet Spielen Sie das erweiterte Audio auf dem Computer ab, um ein bequemeres und effizienteres Musikwiedergabeerlebnis zu ermöglichen. Das Interface-Design ist einfach, klar und benutzerfreundlich. Es nimmt einen minimalistischen Designstil an, ohne übermäßige Dekoration Es unterstützt außerdem eine Vielzahl von Skins und Themes, personalisiert Einstellungen nach Ihren eigenen Vorlieben und erstellt einen exklusiven Musikplayer, der die Wiedergabe mehrerer Audioformate unterstützt. Außerdem unterstützt es die Audio-Gain-Funktion zum Anpassen der Lautstärke Passen Sie die Lautstärke entsprechend Ihrem Hörzustand an, um Hörschäden durch zu hohe Lautstärke zu vermeiden. Als nächstes lass mich dir helfen

NetEase Mailbox ist eine von chinesischen Internetnutzern weit verbreitete E-Mail-Adresse und hat mit seinen stabilen und effizienten Diensten schon immer das Vertrauen der Benutzer gewonnen. NetEase Mailbox Master ist eine E-Mail-Software, die speziell für Mobiltelefonbenutzer entwickelt wurde. Sie vereinfacht das Senden und Empfangen von E-Mails erheblich und macht unsere E-Mail-Verarbeitung komfortabler. Wie Sie NetEase Mailbox Master verwenden und welche spezifischen Funktionen es bietet, wird Ihnen der Herausgeber dieser Website im Folgenden ausführlich vorstellen und hofft, Ihnen weiterzuhelfen! Zunächst können Sie die NetEase Mailbox Master-App im Mobile App Store suchen und herunterladen. Suchen Sie im App Store oder im Baidu Mobile Assistant nach „NetEase Mailbox Master“ und befolgen Sie dann die Anweisungen zur Installation. Nachdem der Download und die Installation abgeschlossen sind, öffnen wir das NetEase-E-Mail-Konto und melden uns an. Die Anmeldeschnittstelle ist wie unten dargestellt

Cloud-Speicher sind heutzutage aus unserem täglichen Leben und Arbeiten nicht mehr wegzudenken. Als einer der führenden Cloud-Speicherdienste in China hat Baidu Netdisk mit seinen leistungsstarken Speicherfunktionen, der effizienten Übertragungsgeschwindigkeit und dem komfortablen Bedienerlebnis die Gunst einer großen Anzahl von Benutzern gewonnen. Und egal, ob Sie wichtige Dateien sichern, Informationen teilen, Videos online ansehen oder Musik hören möchten, Baidu Cloud Disk kann Ihre Anforderungen erfüllen. Viele Benutzer verstehen jedoch möglicherweise nicht die spezifische Verwendung der Baidu Netdisk-App. Dieses Tutorial führt Sie daher im Detail in die Verwendung der Baidu Netdisk-App ein. Wenn Sie immer noch verwirrt sind, folgen Sie bitte diesem Artikel, um mehr im Detail zu erfahren. So verwenden Sie Baidu Cloud Network Disk: 1. Installation Wählen Sie beim Herunterladen und Installieren der Baidu Cloud-Software zunächst die benutzerdefinierte Installationsoption aus.

Das Windows-Betriebssystem ist eines der beliebtesten Betriebssysteme der Welt und seine neue Version Win11 hat viel Aufmerksamkeit erregt. Im Win11-System ist die Erlangung von Administratorrechten ein wichtiger Vorgang. Mit Administratorrechten können Benutzer weitere Vorgänge und Einstellungen auf dem System durchführen. In diesem Artikel wird ausführlich beschrieben, wie Sie Administratorrechte im Win11-System erhalten und wie Sie Berechtigungen effektiv verwalten. Im Win11-System werden Administratorrechte in zwei Typen unterteilt: lokaler Administrator und Domänenadministrator. Ein lokaler Administrator verfügt über vollständige Administratorrechte für den lokalen Computer

MetaMask (auf Chinesisch auch Little Fox Wallet genannt) ist eine kostenlose und beliebte Verschlüsselungs-Wallet-Software. Derzeit unterstützt BTCC die Bindung an die MetaMask-Wallet. Nach der Bindung können Sie sich mit der MetaMask-Wallet schnell anmelden, Werte speichern, Münzen kaufen usw. und bei der erstmaligen Bindung einen Testbonus von 20 USDT erhalten. Im BTCCMetaMask-Wallet-Tutorial stellen wir detailliert vor, wie man MetaMask registriert und verwendet und wie man das Little Fox-Wallet in BTCC bindet und verwendet. Was ist die MetaMask-Wallet? Mit über 30 Millionen Nutzern ist MetaMask Little Fox Wallet heute eines der beliebtesten Kryptowährungs-Wallets. Die Nutzung ist kostenlos und kann als Erweiterung im Netzwerk installiert werden

Detaillierte Erläuterung der Divisionsoperation in OracleSQL In OracleSQL ist die Divisionsoperation eine häufige und wichtige mathematische Operation, die zur Berechnung des Ergebnisses der Division zweier Zahlen verwendet wird. Division wird häufig in Datenbankabfragen verwendet. Daher ist das Verständnis der Divisionsoperation und ihrer Verwendung in OracleSQL eine der wesentlichen Fähigkeiten für Datenbankentwickler. In diesem Artikel werden die relevanten Kenntnisse über Divisionsoperationen in OracleSQL ausführlich erörtert und spezifische Codebeispiele als Referenz für die Leser bereitgestellt. 1. Divisionsoperation in OracleSQL

Apple hat am Dienstag das iOS 17.4-Update veröffentlicht, das eine Reihe neuer Funktionen und Korrekturen für iPhones bringt. Das Update enthält neue Emojis und EU-Nutzer können diese auch aus anderen App-Stores herunterladen. Darüber hinaus stärkt das Update auch die Kontrolle der iPhone-Sicherheit und führt weitere Einstellungsoptionen für den „Schutz gestohlener Geräte“ ein, um Benutzern mehr Auswahl und Schutz zu bieten. „iOS17.3 führt zum ersten Mal die Funktion „Schutz vor gestohlenen Geräten“ ein, die den vertraulichen Informationen der Benutzer zusätzliche Sicherheit verleiht. Wenn der Benutzer nicht zu Hause oder an anderen vertrauten Orten ist, erfordert diese Funktion, dass der Benutzer zum ersten Mal biometrische Informationen eingibt Zeit und nach einer Stunde müssen Sie Informationen erneut eingeben, um auf bestimmte Daten zuzugreifen und diese zu ändern, z. B. um Ihr Apple-ID-Passwort zu ändern oder den Schutz vor gestohlenen Geräten zu deaktivieren.
