代码如下:
if(!("a" in window)){
var a = 1;
}
alert(a);
我已经看过了相关解释,原因是变量声明会被提升,但是变量赋值并不会被提升,但还是不太明白。if语句块里面的代码到底有没有被执行?如果没有,变量的提升是哪条语句造成的?如果执行了,那么a的值应该就是1啊。
尝试了控制台输入以下代码
alert(b)//报错,b未被定义;
if (2>1){
var b=1;
}
alert(b)//1
PHP中文网2017-06-12 09:32:20
if(!("a" in window)){
var a = 1;
}
alert(a);
没有执行
变量提升不是语句造成的,实在js引擎编译你的js代码时进行的!
以chrome为例,首v8引擎碰到你的代码,会把它变成这样:
var a;
if(!("a" in window)){
a = 1;
}
alert(a);
然后因为a已经声明了 所以!("a" in window) 始终为假!if内语句不执行!
所以alert(a)时 a没有值
漂亮男人2017-06-12 09:32:20
变量声明提升后变成一下代码
var a; // 这里变量声明提升了
if(!("a" in window)){
a = 1;
}
alert(a);
变量声明提升后,先定义了a,之后进入if语句,a是window的属性,取反之后变为false,所以if语句里面的代码没有执行,最后弹出来的就是undefined
给我你的怀抱2017-06-12 09:32:20
var a;
if(!(a in window)){
var a = 1;
}
alert(a);
if不成立里面的代码当然不会执行了 所以a是undefined没毛病
伊谢尔伦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.