Inhaltsverzeichnis
Kontextstapel
Heim Web-Frontend js-Tutorial Detaillierte Erläuterung der Verwendung des Ausführungskontexts auf Seiten

Detaillierte Erläuterung der Verwendung des Ausführungskontexts auf Seiten

May 25, 2018 am 11:31 AM
上下文 使用 详解

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
    }
Nach dem Login kopieren

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.

Detaillierte Erläuterung der Verwendung des Ausführungskontexts auf Seiten

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"
Nach dem Login kopieren

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:

Detaillierte Erläuterung der Verwendung des Ausführungskontexts auf Seiten

Wir gehen davon aus, dass der Kontextstapel ein Array ist: ECStack:

ECStack = []
Nach dem Login kopieren

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
]
Nach dem Login kopieren

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()
Nach dem Login kopieren

Die Ausführungslogik kann wie folgt verstanden werden:

  1. zu don() ausführen, den internen Code der Don-Funktion analysieren

  2. um don zu generieren Der Kontext der Funktion (vo, Scope-Kette, this)

  3. Den Kontext von don an ECStack übertragen

  4. Führe den Ausdruck im Don-Funktionskörper aus

  5. Execute too()

  6. Generiere den Kontext der Too-Funktion (vo, Scope-Kette, this)

  7. Den Kontext von too in ECStack verschieben

  8. ...

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>
Nach dem Login kopieren
需要注意的是,上下文与作用域(scope)是不同的概念。上下文是一个运行时概念,浏览器运行后执行 js 代码,将不同的上下文加入上下文栈中,顶层的上下文对应的代码块执行完后又将该上下文销毁。 而作用域是一个静态概念,根据所在代码片段的位置及词法关系确立的,不管浏览器运行与否,源代码的作用域关系、变量的访问权限依然不变。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

前端测试金字塔使用步骤详解

怎样处理MySQL数据库拒绝访问

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Mar 18, 2024 pm 02:58 PM

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

Mar 18, 2024 am 10:58 AM

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

So verwenden Sie NetEase Mailbox Master So verwenden Sie NetEase Mailbox Master Mar 27, 2024 pm 05:32 PM

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

So verwenden Sie die Baidu Netdisk-App So verwenden Sie die Baidu Netdisk-App Mar 27, 2024 pm 06:46 PM

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.

Ausführliche Erklärung zur Erlangung von Administratorrechten in Win11 Ausführliche Erklärung zur Erlangung von Administratorrechten in Win11 Mar 08, 2024 pm 03:06 PM

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

BTCC-Tutorial: Wie kann ich die MetaMask-Wallet an der BTCC-Börse binden und verwenden? BTCC-Tutorial: Wie kann ich die MetaMask-Wallet an der BTCC-Börse binden und verwenden? Apr 26, 2024 am 09:40 AM

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 Oracle SQL Detaillierte Erläuterung der Divisionsoperation in Oracle SQL Mar 10, 2024 am 09:51 AM

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

Erfahren Sie, wie Sie die neuen erweiterten Funktionen von iOS 17.4 „Schutz vor gestohlenen Geräten' nutzen. Erfahren Sie, wie Sie die neuen erweiterten Funktionen von iOS 17.4 „Schutz vor gestohlenen Geräten' nutzen. Mar 10, 2024 pm 04:34 PM

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.

See all articles