suchen

Heim  >  Fragen und Antworten  >  Hauptteil

javascript - Warum gibt der folgende Code „undefiniert“ aus?

Der Code lautet wie folgt:

if(!("a" in window)){
    var a = 1;
}
alert(a);

Ich habe die entsprechende Erklärung gesehen. Der Grund dafür ist, dass die Variablendeklaration gefördert wird, die Variablenzuweisung jedoch nicht, aber ich verstehe es immer noch nicht. Wurde der Code im if-Anweisungsblock ausgeführt? Wenn nicht, welche Anweisung hat dazu geführt, dass die Variable heraufgestuft wurde? Bei der Ausführung sollte der Wert von a 1 sein.
Ich habe versucht, den folgenden Code in die Konsole einzugeben

alert(b)//报错,b未被定义;
if (2>1){
    var b=1;
}
alert(b)//1
迷茫迷茫2723 Tage vor753

Antworte allen(6)Ich werde antworten

  • 巴扎黑

    巴扎黑2017-06-12 09:32:20

    if("a" in window)
    var a = 1;
    alert(a);

    Antwort
    0
  • PHP中文网

    PHP中文网2017-06-12 09:32:20

    if(!("a" in window)){
        var a = 1;
    }
    alert(a);

    问题1

    没有执行

    问题2

    变量提升不是语句造成的,实在js引擎编译你的js代码时进行的!

    啥原理?

    以chrome为例,首v8引擎碰到你的代码,会把它变成这样:

    var a;
    if(!("a" in window)){
        a = 1;
    }
    alert(a);

    然后因为a已经声明了 所以!("a" in window) 始终为假!if内语句不执行!
    所以alert(a)时 a没有值

    Antwort
    0
  • 巴扎黑

    巴扎黑2017-06-12 09:32:20

    我用你的代码结果弹出1

    Antwort
    0
  • 漂亮男人

    漂亮男人2017-06-12 09:32:20

    变量声明提升后变成一下代码

    var a; // 这里变量声明提升了
    if(!("a" in window)){
        a = 1;
    }
    alert(a);

    变量声明提升后,先定义了a,之后进入if语句,a是window的属性,取反之后变为false,所以if语句里面的代码没有执行,最后弹出来的就是undefined

    Antwort
    0
  • 给我你的怀抱

    给我你的怀抱2017-06-12 09:32:20

    var a;
    if(!(a in window)){

    var a = 1;

    }
    alert(a);
    if不成立里面的代码当然不会执行了 所以a是undefined没毛病

    Antwort
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-12 09:32:20

    if(!("a" in window)){
        var a = 1;
    }
    alert(a);

    在JavaScript引擎解析这段代码的时候,会解析成如下样子:

    var a ;
    if(!("a" in window)){
        a = 1;
    }
    alert(a);

    因为你的a已经声明为window的属性了,故if条件始终为假,a未被赋值即为undefined.

    Antwort
    0
  • StornierenAntwort