Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erläuterung des Javascript-Bereichs

Detaillierte Erläuterung des Javascript-Bereichs

藏色散人
藏色散人nach vorne
2019-05-07 09:15:222447Durchsuche

Bereichsverständnis: der Bereich, in dem definierte Variablen und Funktionen wirksam werden. JavaScript hat zwei Typen: globalen Bereich und Funktionsbereich.

Hinweis: Es6 implementiert den let-Block-Level-Bereich, der nicht für js nativ ist. Die unterste Ebene wird auch über var implementiert. Wenn Sie die spezifischen Details erfahren möchten, besuchen Sie bitte Babel Official, um let in es6 zu analysieren.

Ausführungskontext

Geltungsbereich: innerhalb eines Absatzes oder einer Funktion;
Global: Funktionsdeklaration, Variablendeklaration. Geltungsbereich: ;
Funktion: Funktionsdeklaration, Variablendeklaration, Dies, Argumente. Geltungsbereich: innerhalb einer Funktion;

Funktions- und Variablendeklarationsförderung

<script>
        foo(); //打印a
        var foo = 1;
        function foo (){
            console.log(’a‘)
        };
        console.log(foo); //1
</script>


//实际的执行顺序为
<script>
        function foo(){  //函数声明优先于变量的声明
            console.log("a");
        }
        //var a ;  重复声明,这儿被省略了。
        foo(); //打印a
        foo = 1;  //给foo赋值为1
        console.log(foo); //1
</script>

Wenn die js-Engine einen Ausführungskontextcodeblock ausführt, ist die Ausführungsreihenfolge:
1 Funktionsdeklarationsfunktion a( ) {}; (Funktion hat Vorrang) Hinweis: let a = function (){}; Dies ist die Deklaration und Zuweisung von Variablen, nicht die Deklaration einer Funktion.
2. Variablendeklaration var a; Hinweis: Zu Beginn wird nur die Variable deklariert und keine Zuweisung durchgeführt. Wenn diese Variable vor der Zuweisung verwendet wird, ist der Wert: undefiniert.
3. Wenn der Ausführungskontext der Funktionsumfang ist: Bestimmen Sie dies und die Argumente.
4. Führen Sie den Code im Bereich nacheinander gemäß der js-Single-Thread- und asynchronen Strategie aus.

Wir sind es gewohnt, var a = 2; als Anweisung zu betrachten, aber tatsächlich denkt die JavaScript-Engine nicht so. Es behandelt var a und a = 2 als zwei separate Deklarationen, die erste ist eine Aufgabe zur Kompilierungszeit und die zweite eine Aufgabe zur Ausführungszeit. Dies bedeutet, dass eine Deklaration unabhängig davon, wo sie im Gültigkeitsbereich erscheint, zuerst verarbeitet wird, bevor der Code selbst ausgeführt wird. Sie können sich diesen Prozess so vorstellen, dass alle Deklarationen (Variablen und Funktionen) an die Spitze ihres jeweiligen Gültigkeitsbereichs „verschoben“ werden. Dieser Vorgang wird als Heraufstufung bezeichnet. Achten Sie darauf, wiederholte Deklarationen zu vermeiden, insbesondere wenn gewöhnliche Var-Deklarationen und Funktionsdeklarationen gemischt werden, da sonst viele gefährliche Probleme auftreten!

Bereichskette

Freie Variablen: Variablen, die nicht im aktuellen Bereich definiert sind, aber im oberen Bereich definiert sind und in diesem Bereich verwendet werden können.
Bereichskette: Wenn Sie eine Variable verwenden, suchen Sie sie zuerst in ihrem eigenen Bereich. Wenn sie nicht gefunden wird, durchsuchen Sie sie dann im übergeordneten Bereich, bis sie den globalen Bereich findet. Wenn sie nicht gefunden wird, wird ein Fehler gemeldet .

Bereich auf Blockebene

js hat keinen Bereich auf Blockebene, sondern nur einen globalen Bereich und einen Funktionsbereich.
ES6 implementiert den Blockebenenbereich von js durch die spezielle Implementierung des globalen Bereichs let;
der effektive Bereich ist { };
const ist eine definierte Konstante. Hinweis: Die Speicheradresse, an der der Wert einer definierten Konstante gespeichert ist, kann nicht geändert werden, wenn der Wert beispielsweise als Array oder Objekt definiert ist, können die Originaldaten über die Array- oder Objektmethode manipuliert werden Solange der Wert nicht neu zugewiesen wird, gibt es kein Problem.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Javascript-Bereichs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen