Heim  >  Artikel  >  Web-Frontend  >  Eine kurze Diskussion über die Ausführungsumgebung (Bereich) und die Bereichskette in JavaScript

Eine kurze Diskussion über die Ausführungsumgebung (Bereich) und die Bereichskette in JavaScript

黄舟
黄舟Original
2016-12-13 16:49:571428Durchsuche

Ich glaube, dass viele Anfänger kein gutes Verständnis der Ausführungsumgebung und der Umfangskette in JavaScript haben. Hier werde ich es nach meinem eigenen Verständnis mit Ihnen teilen.

Im Allgemeinen unterteilen wir die Ausführungsumgebung in eine globale Ausführungsumgebung und eine lokale Ausführungsumgebung. Die lokale Ausführungsumgebung kann auch als Funktionsausführungsumgebung bezeichnet werden. Was genau ist eine Ausführungsumgebung? Laienhaft ausgedrückt ist die Ausführungsumgebung die Umgebung, in der der Code ausgeführt wird. Schauen wir uns den folgenden Code an und analysieren ihn weiter.

<script><br>var name="zhuzhenwei";
function changeName(){
    if (name=="zhuzhenwei"){
          name="heting";
    }else{
          name="zhuzhenwei";
    }
}
changeName();
console.log(name); //heting<br></script>

Wie im obigen Code gezeigt, ist die Umgebung, in der sich die Anweisung befindet, die globale Ausführungsumgebung Es ist zu beachten, dass jeder Ausführungsumgebung ein Variablenobjekt zugeordnet ist. Für die globale Ausführungsumgebung ist das damit verbundene Objekt das Fensterobjekt. Unmittelbar danach deklariert die folgende Anweisung eine Funktion (Hinweis: Hiermit wird nur die Funktion deklariert, der interne Code wird erst ausgeführt, wenn er aufgerufen wird).​ Diese Funktion befindet sich auch in der globalen Ausführungsumgebung. Schließlich haben wir die Funktion „changeName()“ aufgerufen. Sobald die Funktion aufgerufen wird, springt sie sofort zur Ausführungsumgebung der Funktion „changeName()“ (d. h. zur Ausführungsumgebung der Funktion) und beginnt mit der Erstellung die entsprechenden Variablen innerhalb der Funktion (z. B. Angenommen, var erscheint in der Funktion). a=12; Code wie dieser), es wird nicht erstellt, ohne die Funktion aufzurufen, und das damit verbundene Variablenobjekt wird als aktives Objekt betrachtet (das aktive Objekt enthält zunächst nur eine Variable, nämlich das Argumentobjekt), von top, um die folgende Anweisung auszuführen. Gleichzeitig wird bei der Ausführung des Codes in der Funktionsumgebung eine Bereichskette des Variablenobjekts erstellt. Diese Bereichskette enthält das Variablenobjekt von changeName () und das globale Variablenobjekt.

Die Bereichskette ist eigentlich der Bereich, auf den wir vom Front-End bis zum Ende zugreifen können. Dies stellt einen ordnungsgemäßen Zugriff auf alle Variablen und Funktionen sicher, die Zugriff auf die Ausführungsumgebung haben, auf die das Front-End verweist zum aktuell ausgeführten Code. Das Variablenobjekt, in dem es sich befindet, ist jetzt das Variablenobjekt der Funktion „changeName()“ und das Ende ist das globale Variablenobjekt. Wenn wir beispielsweise die Funktion ausführen, müssen wir einen Bezeichner finden besteht darin, das Ende der Bereichskette zu durchsuchen. Wenn das Ende der Bereichskette nicht gefunden wird, wird weiter nach oben gesucht, bis das Fensterobjekt erreicht ist. Obwohl ich die Bereichskette in der globalen Umgebung nicht erwähnt habe, existiert die Bereichskette tatsächlich auch in der globalen Umgebung, aber es gibt nur ein globales Variablenobjekt. Es ist offensichtlich: Der Zugriff auf lokale Variablen ist schneller als der Zugriff auf globale Variablen, da keine Suche in der Bereichskette erforderlich ist. Offensichtlich ändert sich die Bereichskette dynamisch abhängig von der Ausführungsumgebung, in der sich der Code befindet.

Nachdem die Funktion „changeName()“ ausgeführt wurde, dh nachdem der Code in der Funktionsausführungsumgebung ausgeführt wurde, werden die lokalen Variablen und lokalen Objekte in der Umgebung sofort zerstört (sofern die Variable nicht mit deklariert wurde). var zeigt an, dass es sich um globale Variablen handelt, die nicht zerstört werden, nachdem der Code in der lokalen Umgebung ausgeführt wurde. Anschließend ändert sich die Ausführungsumgebung von der Funktionsausführungsumgebung zur globalen Ausführungsumgebung und führt weiterhin console.log( Name); Aussage. Wenn wir jedoch die Webseite oder den Browser schließen, wird auch die globale Umgebung zerstört.

Die Zusammenfassung lautet wie folgt:

Die Ausführungsumgebung wird auch zum Bereich, und die Ausführungsumgebung bestimmt den Lebenszyklus von Variablen.

Die Ausführungsumgebung ist in eine globale Ausführungsumgebung und eine lokale Ausführungsumgebung unterteilt. Jedes Mal, wenn Sie eine Ausführungsumgebung betreten, wird eine Bereichskette für die Suche nach Variablen und Funktionen erstellt, daher gehen wir davon aus, dass sich diese Bereichskette dynamisch ändert . .

Die lokale Umgebung einer Funktion hat nicht nur Zugriff auf Variablen im Funktionsbereich, sondern auch auf ihre enthaltende Umgebung (übergeordnete Umgebung) und sogar auf die globale Umgebung, während die globale Umgebung nur auf definierte Variablen zugreifen kann In der globalen Umgebung und in Funktionen (Variablen, die in der lokalen Umgebung nicht mit var deklariert werden, sind auch globale Variablen) können sie nicht auf Daten in der lokalen Umgebung zugreifen (nicht alle Daten werden erwähnt, gerade weil auf globale Variablen zugegriffen werden kann). Hinweis: Parameter in einer Funktion sind lokale Variablen der Funktion.

Das Obige ist der gesamte Inhalt der Ausführungsumgebung (Umfang) und der Umfangskette in JavaScript. Ich hoffe, dass der Inhalt dieses Artikels jedem beim Lernen oder Arbeiten helfen kann Wenn Sie weitere verwandte Inhalte erfahren möchten, besuchen Sie bitte die chinesische PHP-Website (www.php.cn)


Stellungnahme:
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