javascript - 以下代码为什么输出为'undefined”?
迷茫
迷茫 2017-06-12 09:30:20
0
6
752

代码如下:

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

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

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

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(6)
巴扎黑

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

Ty80
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没有值

巴扎黑

我用你的代码结果弹出1

漂亮男人

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

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

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

给我你的怀抱

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

var a = 1;

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

伊谢尔伦
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.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板