搜索

首页  >  问答  >  正文

javascript - 以下代码为什么输出为“undefined”?

代码如下:

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

我已经看过了相关解释,原因是变量声明会被提升,但是变量赋值并不会被提升,但还是不太明白。if语句块里面的代码到底有没有被执行?如果没有,变量的提升是哪条语句造成的?如果执行了,那么a的值应该就是1啊。
尝试了控制台输入以下代码

alert(b)//报错,b未被定义;
if (2>1){
    var b=1;
}
alert(b)//1
迷茫迷茫2727 天前755

全部回复(6)我来回复

  • 巴扎黑

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

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

    回复
    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没有值

    回复
    0
  • 巴扎黑

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

    我用你的代码结果弹出1

    回复
    0
  • 漂亮男人

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

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

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

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

    回复
    0
  • 给我你的怀抱

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

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

    var a = 1;

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

    回复
    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.

    回复
    0
  • 取消回复