Heim  >  Artikel  >  Web-Frontend  >  Erläuterung des Wissens über Umfang und Abschluss in JavaScript

Erläuterung des Wissens über Umfang und Abschluss in JavaScript

php是最好的语言
php是最好的语言Original
2018-08-09 11:36:071738Durchsuche

Zusammenfassung der Überprüfung: Das Verhalten des Funktionsbereichs und des Blockbereichs ist das gleiche. Es kann davon ausgegangen werden, dass jede in einem bestimmten Bereich deklarierte Variable diesem Bereich angehängt wird.

1. Warum ist das so?

1. Jetzt stellen wir zwei Fragen und geben die folgenden zwei Codeteile. Bitte denken Sie zuerst über die Ausgabeergebnisse nach und üben Sie sie dann.

//第一段代码
a=2;
var a;
console.log(a);

//第二段代码
console.log(a);
var a=2;

2. Ich schätze, das Ergebnis ist so: Sie vermuten, dass das Ergebnis des ersten Teils des Codes unterbestimmt ist, und dann ist das Ergebnis der Ausführung im Browser 2; Der Code ist 2, aber im Browser ist das Ergebnis der Operation unterdefiniert. Bruder! Ist dies der Fall (auch wenn dies nicht der Fall ist, vermute ich, dass Sie andere Formen falscher Vermutungen anstellen).

3. Erklären wir, warum das Ergebnis des ersten Codes 2 ist und das Ergebnis des zweiten Codes undefiniert ist. Erinnern Sie sich zunächst daran, was wir zuvor gesagt haben, dass ein Code mit var a=2 wie zwei aussieht Codes in JS: var a und a=2; ersteres wird während der Kompilierung ausgeführt und letzteres wird zur Laufzeit ausgeführt, was ist also die Frage? Die Deklarationen von Variablen und Funktionen werden verarbeitet, bevor das Programm ausgeführt wird. Ist die Ausführungsreihenfolge des Codes also immer noch die Schreibreihenfolge, die Sie sehen?

4. Für den ersten Codeabschnitt wird zuerst die zweite Codezeile var a während der Kompilierung verarbeitet, und die erste und dritte Zeile werden zur Laufzeit verarbeitet. Dann ist die Verarbeitungsform des gesamten Codes wie folgt :

//第一段代码被JS这样的顺序处理了
var a;
a=2;
console.log(a);

Schau mal! So kann man es verstehen, oh! Erst deklarieren, dann zuweisen, dann ausdrucken.

5. Aus dem gleichen Grund wird der zweite Teil des Codes wie folgt verarbeitet:

rrree

A wurde während der Kompilierung deklariert, aber bei der Ausführung wird es auf der Konsole ausgeführt wurde vor log(a) kein Wert zugewiesen und ist beim Drucken natürlich unterdefiniert.

6 Daher werden bei der Verarbeitung des Codes durch JS die Positionen der Variablen- und Funktionsdeklarationen angegeben im Code scheint verschoben zu werden. Wenn er den oberen Rand des Bereichs erreicht, besteht der während des -Kompilierungsprozesses deklarierte Prioritätsprozess darin, zu fördern!

2. Jeder Bereich wird hochgestuft

1. Sehen Sie sich den folgenden Code an:

//第二段代码被JS以这样的形式处理:
var a;
console.log(a);
a=2;

Der globale Bereich wird die foo-Funktionsdeklaration hochstufen, A wird in der Domäne hochgestuft und die Verarbeitungsform lautet wie folgt:

foo();

function foo(){
    console.log(a);
    var a=2;
}

2. Besonderer Hinweis: Funktionsdeklarationen werden hochgestuft, Funktionsausdrücke werden jedoch nicht hochgestuft . Benannter Funktionsausdruck, der Namensbezeichner kann vor der Zuweisung nicht im Gültigkeitsbereich verwendet werden Was bedeuten diese beiden Sätze? Die folgenden zwei Codeteile sagen es Ihnen:

function foo(){
    var a;
    console.log(a);
    a=2;
}
foo();

Nachdem dieser Code verbessert wurde, sieht er so aus:

foo();  TypeError
bar();  ReferenceError
var foo=function bar(){
    //....
}

Für foo gibt es also eine Deklaration, aber keine Zuweisung zu foo , und foo ist zu diesem Zeitpunkt undefiniert, was natürlich einen Fehler in der Art der Operation darstellt. Und bar, noch nicht einmal deklariert, ist im Funktionsausdruck von foo deklariert, es handelt sich also um einen nicht deklarierten Fehler.

3. Zur Förderung: Funktionen werden zuerst beworben, gefolgt von Variablen

Verwandte Empfehlungen:

Vertiefte Kenntnisse von Javascript Umfang und Abschlüsse

Detaillierte Erläuterung des Umfangs und der Abschlüsse von JavaScript

Das obige ist der detaillierte Inhalt vonErläuterung des Wissens über Umfang und Abschluss in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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