Heim > Web-Frontend > js-Tutorial > Hauptteil

Detaillierte Erläuterung der JS-Variablenförderung

小云云
Freigeben: 2018-02-26 14:08:27
Original
1552 Leute haben es durchsucht


1. Die Ausführung des JavaScript-Codes ist in zwei Phasen unterteilt:

  • Vorparsing-Phase: In der Vorparsing-Phase stuft js die mit var deklarierten Variablen und die Anweisungsblöcke herauf, die mit function und beginnen Ersetzen Sie var durch Deklarierte Variablen und Funktionen werden an den Anfang des Codes verschoben. Es ist zu beachten, dass die Funktion als Ganzes hochgestuft wird. Von var deklarierte Variablen fördern nur die Variablendeklaration und Zuweisungsvorgänge werden nicht gleichzeitig mit der Heraufstufung ausgeführt

  • Ausführung Phase

2. Zum Beispiel:

alert(a)//undefinedvar a = 1;  

为什么会输出undefined呢?
模拟提升的之后的代码 ,上一段代码相当于 var a;  //声明一个变量。但是没有初始化Alert(a);
 a = 1;  //初始化为1----------
fun();    //在C语言中,如果不先声明函数,先调用后声明函数会报错,但是js会正常运行function fun(){
    alert(“函数被声明了”);
}

代码提升后 相当于 
function fun(){
    alert(“函数被声明了”);
}

fun();
Nach dem Login kopieren

3. Alle werden hochgestuft, aber nachfolgende Funktionen überschreiben vorherige Funktionen

func1();  //输出  我是后声明的函数function func1(){
   console.log('我是先声明的函数');
}function func1(){
   console.log('我是后声明的函数');
}
模拟提升后的代码function func1(){
   console.log('我是先声明的函数');
}function func1(){
   console.log('我是后声明的函数');
}
func1();
 函数名也是变量,后面的会覆盖前面。
Nach dem Login kopieren

4 . Hochstufungsregeln für Variablen mit demselben Namen wie Funktionsnamen: Wenn es eine Variable mit demselben Namen wie eine Funktion gibt, wird die Variable ignoriert und nur die Funktion hochgestuft

alert(foo); //输出function foo(){}function foo(){
}
var foo = 2;
alert(foo); //输出 2----------模拟提升后的代码function foo{}Alert(foo);
foo = 2;
alert(foo);
Nach dem Login kopieren

5. Die Variablenförderung ist in Bereiche unterteilt

var num = 123; function test(){
     console.log(num);     var num = 10;
 }
 test(); //输出undefined; ----------


模拟变量提升后的代码  var num;function test(){var num
   console.log(num); //函数内部声明了num,但是没赋值。因为在函数内部声明了num,所以函数会使用它内部声明的num,而不会去全局中找  
   num = 10;
  }
num = 123;
Nach dem Login kopieren

6. Funktionsausdrücke werden nicht gefördert

func();  // func is not a function
 var func = function(){
    alert("1234");
 }


----------


提升后的代码var func;
func();
func = function(){
    alert("1234");
};
 用var声明的变量(包括函数表达式),只提升声明,不提升赋值操作
Nach dem Login kopieren

Eine letzte Übung

var s1 = „qq“;

foo();

function foo() {
    console.log(s1); 
    var s1 = "tengxunqq";
    console.log(s1);
Nach dem Login kopieren

}

提升后:    var s1;    function foo() {
        var s1;
        console.log(s1); //
        s1= "tengxunqq";
        console.log(s1); //t
    }
     s1 = "qq";
    foo();  //先输出 undefined  后engxunqq
Nach dem Login kopieren

Verwandte Empfehlungen:

Einführung in JS-Variablen und deren Umfang Wissenspunkte

Wie deklariere ich den JS-Variablenbereich? Und detaillierte Erklärung von Bereichsbeispielen innerhalb von Funktionen

Detaillierte Erklärung von Beispielen für die Förderung von js-Variablen und der Voranalyse von Funktionsdeklarationen

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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage