Heim  >  Artikel  >  Web-Frontend  >  Was bedeutet Javascript-Variablenwerbung?

Was bedeutet Javascript-Variablenwerbung?

青灯夜游
青灯夜游Original
2022-02-07 14:00:024653Durchsuche

In JavaScript bedeutet Variablenheraufstufung, dass innerhalb des Gültigkeitsbereichs einer Variablen, unabhängig davon, wo die Variable deklariert ist, sie an die Spitze des Gültigkeitsbereichs heraufgestuft wird, die Reihenfolge der Variableninitialisierung jedoch unverändert bleibt. Die eigentliche Implementierung des Variablenhebens besteht darin, dass JavaScript-Variablen- und Funktionsdeklarationen während der Kompilierungsphase im Speicher abgelegt werden.

Was bedeutet Javascript-Variablenwerbung?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, JavaScript-Version 1.8.5, Dell G3-Computer.

Was ist Variable Boosting?

Variables Heben (Hoisting) ist das Verständnis der Leute dafür, wie der JavaScript-Ausführungskontext funktioniert, und es handelt sich nicht um eine offizielle Änderung.

Variablenförderung bedeutet im wahrsten Sinne des Wortes, dass die Deklaration von Variablen und Funktionen in der physischen Ebene an den Anfang des Gültigkeitsbereichs verschoben wird. Obwohl dieses Verständnis nicht korrekt ist, ist der Effekt derselbe.

Laienhaft ausgedrückt bedeutet Variablenheraufstufung, dass innerhalb des Gültigkeitsbereichs einer Variablen, unabhängig davon, wo die Variable deklariert ist, sie an die Spitze des Gültigkeitsbereichs heraufgestuft wird, die Reihenfolge der Variableninitialisierung jedoch unverändert bleibt.

Die eigentliche Implementierung der Variablenförderung besteht darin, dass die Deklaration von JavaScript-Variablen und -Funktionen während der Kompilierungsphase im Speicher abgelegt wird. Dies bedeutet, dass Benutzer eine Funktion oder Variable verwenden können, bevor sie offiziell deklariert wird.

Um die Implementierung der Variablenförderung zu verstehen, müssen wir zunächst die folgenden zwei Punkte klären:

  • Javascript-Code wird nicht Zeile für Zeile ausgeführt.

  • Die Ausführung von Javascript ist in zwei Schritte unterteilt:

    • Kompilierung ( lexikalische Erklärung/Vorinterpretation)

    • Ausführung

Variablenförderung hilft beim Verständnis

console.log(a);
var a = 'ghostwu';

Für das obige Codebeispiel, die erste Codezeile, denken Sie vielleicht, dass ein Fehler gemeldet wird, weil vorher a wird ausgegeben. Die a-Variable ist nicht definiert, aber das korrekte Ergebnis ist undefiniert. Gemäß der obigen Erklärung des js-Ausführungscodes in Kombination mit dem eigentlichen Code betrachtet js diesen Satz tatsächlich als zwei Stufen, wenn wir auf var a = „ghostwu“ zum Definieren einer Variablen stoßen: var a tritt in der Kompilierungsphase auf, a = „ghostwu“ tritt in der Ausführungsphase auf. Dann wird var a an den Anfang des aktuellen Bereichs befördert, a = „ghostwu“ bleibt an Ort und Stelle und wartet auf die Ausführungsphase. Schauen Sie sich also den folgenden Fall an:

 a = 'ghostwu';
 var a;
 console.log( a );
 
 //上面这段代码经过编译之后,变成下面这样

 var a;  //被提升到当前作用域的最前面
 a = 'ghostwu'; //留在原地,等待执行
 console.log( a ); //输出ghostwu
 
 
 
  console.log( a ); 
   var a = 'ghostwu';

   //上面这段代码,经过编译之后,变成下面这样
   
   var a;
  console.log( a );//输出undefined,而不会报错
   a = 'ghostwu';

Funktion Deklarationsförderung

Bevor wir die Funktionsdeklarationsförderung erklären, wollen wir zunächst die beiden gängigen Methoden zum Definieren von Funktionen verstehen

         //函数声明, 形如:
         function show(){
             console.log( '函数声明方式' );
         }
 
         //函数表达式, 形如:
         var show = function(){
             console.log( '表达式方式' );
         }

Da Funktionsausdrücke und Funktionsdeklarationen während der Kompilierungsphase unterschiedliche Interpretationseffekte erzeugen, werden die Funktionen Die Anweisung wird heraufgestuft. Ein Beispiel finden Sie im folgenden Code:

         show();
         function show(){
             console.log( a );
             var a = 'ghostwu';
         }


//函数声明会被提升,所以上面的代码经过编译之后,就变成下面这样

    function show(){    //函数声明被提升到 当前作用域的最前面
    var a;    
     //var声明被提升到当前作用域的最前面, 注意,他不会提升到函数的外面, 因为当前的作用域是在函数中
    console.log( a );
    a = 'ghostwu';
   }
   show();//输出undefined

Aber der Funktionsausdruck wird nicht hochgestuft. Siehe das folgende Beispiel:

show(); //报错,show is not a function
var show = function(){
 console.log( 'ghostwu' );
}
//对于上面这段表达式代码,经过编译之后:
var show;
show();  //执行之后就是 undefined(), 所以在表达式定义之前,调用函数报错了
show = function(){
  console.log( 'ghostwu' );  
}

Aber sehen Sie sich den folgenden Fall an:

show(); //你好
var show;
function show(){
console.log( '你好' );
}
show = function(){
   console.log( 'hello' );
}

Warum gibt der obige Code „Hallo“ aus?“ Wenn eine Funktionsdeklaration oder Variablendeklaration mit demselben Namen erscheint, wird die Funktionsdeklaration zuerst heraufgestuft und die Variablendeklaration ignoriert. Nach der Kompilierung lautet es also:

function show(){
   console.log( '你好' );
}
show(); //你好
show = function(){
  console.log( 'hello' );
}
show();//如果这里在调用一次,就是hello, 因为show函数体在执行阶段被重新赋值了

Wenn es jedoch eine Funktionsdeklaration mit demselben Namen gibt, überschreibt diese die vorherige, wie im folgenden Code gezeigt:

show(); //how are you
var show;
function show(){
console.log( 'hello' );
}    
show = function(){
console.log( '你好' );
}
function show(){
console.log( 'how are you!' );
}  

//上面的代码经过编译之后,变成如下形式:
function show(){
   console.log( 'how are you!' );
}
show(); //how are you
show = function(){
 console.log( '你好' );
}
show(); //如果在这里再执行一次,结果:你好

Hinweis:

  • Durch die Variablenförderung wird nur die Deklaration der Variablen verbessert, der Zuweisungswert wird jedoch nicht erhöht.

  • Da es so etwas wie Variablenförderung gibt, sollten wir bei der Definition von Variablen lieber let statt var verwenden, um die negativen Auswirkungen der Variablenförderung zu vermeiden.

【Verwandte Empfehlungen: Javascript-Lerntutorial

Das obige ist der detaillierte Inhalt vonWas bedeutet Javascript-Variablenwerbung?. 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