Heim  >  Artikel  >  Web-Frontend  >  Was ist Variablenförderung in js? Warum gibt es variable Beförderungen?

Was ist Variablenförderung in js? Warum gibt es variable Beförderungen?

青灯夜游
青灯夜游nach vorne
2021-08-16 09:51:257458Durchsuche

Was ist Variablenhub in JavaScript? Dieser Artikel führt Sie durch die Variablenförderung in js und stellt vor, warum es eine Variablenförderung gibt.

Was ist Variablenförderung in js? Warum gibt es variable Beförderungen?

js-Variablenförderung

JavaScript ist eine Single-Threaded-Sprache, daher muss die Ausführung in der richtigen Reihenfolge erfolgen. Es wird jedoch nicht Zeile für Zeile analysiert und ausgeführt, sondern Stück für Stück. Zuerst wird die Kompilierungsphase und dann die Ausführungsphase durchgeführt. Während der Kompilierungsphase, einige Millisekunden bevor der Code tatsächlich ausgeführt wird, werden alle Variablen- und Funktionsdeklarationen erkannt und innerhalb einer JavaScript-Datenstruktur namens Lexical Environment zum Speicher hinzugefügt. Diese Variablen und Funktionen können also verwendet werden, bevor sie tatsächlich deklariert werden.

Beginnen wir mit einem einfachen Beispiel:

 a = 2;
 var a;
 console.log(a);

Was wird der obige Code ausgeben? Wenn dieser Code von oben nach unten ausgeführt wird, wird er definitiv undefiniert ausgegeben. JavaScript ist jedoch keine Top-Down-Ausführungssprache. Die Ausgabe dieses Codes ist 2. Ist das unerwartet? Warum passiert das also? Der entscheidende Punkt liegt in der Variablen Werbung. Dadurch werden die Deklarationen aller Variablen im aktuellen Bereich an den Anfang des Programms verschoben. Daher entspricht der obige Code dem folgenden Code.

 var a;
 a = 2;
 console.log(a);

Schauen wir uns also ein anderes Beispiel an:

 console.log(a);
 var a = 2;

Was wird dieser Code ausgeben? Ausgang 2? Tatsächlich wird dieser Code undefiniert ausgegeben. Warum ist das so? Wie ich gerade sagte, befördert JavaScript die Deklaration von Variablen nach oben, die Zuweisungsanweisung jedoch nicht. Für js wird var a = 2 in zweistufige Analyse:

var a;
a = 2;

und js unterteilt befördert var a, daher ist die Aussage gerade äquivalent zu:

 var a;
 console.log(a);
 a = 2;

Warum gibt es also eine variable Beförderung?

Warum kommt es zum Phänomen der variablen Beförderung? Weil js, wie andere Sprachen auch, die Kompilierungs- und Ausführungsphasen durchlaufen muss. Wenn sich js in der Kompilierungsphase befindet, sammelt es alle Variablendeklarationen und deklariert Variablen im Voraus, und andere Anweisungen ändern ihre Reihenfolge nicht. Daher wurde während der Kompilierungsphase der erste Schritt ausgeführt und der zweite Teil wird ausgeführt nur, wenn die Anweisung in der Ausführungsphase ausgeführt wird.

Variablendeklaration

JS-Variablendeklarationen können grob in drei Typen unterteilt werden: var-Deklarationen, let- und const-Deklarationen und Funktionsdeklarationen. Wenn Funktionsdeklarationen zusammen mit anderen Deklarationen erscheinen, können einige Konflikte auftreten. Werfen wir einen Blick nach unten:

 fn();
 function fn () {
     console.log('fn');
 }
 var fn = 2;

Was wird Ihrer Meinung nach ausgegeben? Bekomme ich eine Fehlermeldung, wenn ich das schreibe? Tatsächlich ist das Ausgabeergebnis fn. Dies erklärt die Frage, die wir gerade gestellt haben: Wer hat Vorrang, wenn eine Funktionsdeklaration zusammen mit anderen Deklarationen erscheint? Die Antwort lautet: Funktionsdeklaration steht über allem anderen, schließlich sind Funktionen die Aristokratie von js.

Was tun mit so vielen Funktionsdeklarationen?

 fn();
 function fn () {
     console.log('1');
 }
 function fn () {
     console.log('2');
 }

Das Ausgabeergebnis des obigen Codes ist 2. Dies liegt daran, dass bei mehreren Funktionsdeklarationen in die letzte Funktionsdeklaration die vorherige ersetzt.

Es gibt noch ein letztes Beispiel:

 fn();
 var fn = function () {
 console.log('fn');
 }

Ist das nach dem obigen Verständnis sehr einfach? Dies ist dasselbe wie im zweiten Beispiel. Dieses Format von var fn = function() {} wird als Funktionsausdruck bezeichnet. Es ist eigentlich in zwei Teile unterteilt:

var fn;
fn = function() {};

Anhand von Beispiel 2 können wir erkennen, dass das Ergebnis ein Fehler sein sollte (da fn deklariert, aber nicht zugewiesen ist, also ist fn undefiniert).

Zusammenfassung

Also, lasst uns zusammenfassen.

  • js hebt die Variablendeklaration zur Ausführung an die Spitze von js. Bei Anweisungen wie var a = 2 wird sie geteilt und der var a-Schritt hochgestuft.

  • Der Kern der Variablenförderung besteht tatsächlich darin, dass die js-Engine beim Kompilieren alle Variablen deklariert, sodass beim Ausführen alle Variablen deklariert wurden.

  • Wenn mehrere Variablen mit demselben Namen vorhanden sind, überschreibt die Funktionsdeklaration andere Deklarationen. Wenn mehrere Funktionsdeklarationen vorhanden sind, überschreibt die letzte Funktionsdeklaration alle vorherigen Deklarationen.

Weitere Kenntnisse zum Thema Programmierung finden Sie unter: Einführung in die Programmierung! !

Das obige ist der detaillierte Inhalt vonWas ist Variablenförderung in js? Warum gibt es variable Beförderungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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