代码如下:
if(!("a" in window)){
var a = 1;
}
alert(a);
我已经看过了相关解释,原因是变量声明会被提升,但是变量赋值并不会被提升,但还是不太明白。if语句块里面的代码到底有没有被执行?如果没有,变量的提升是哪条语句造成的?如果执行了,那么a的值应该就是1啊。
尝试了控制台输入以下代码
alert(b)//报错,b未被定义;
if (2>1){
var b=1;
}
alert(b)//1
代码如下:
if(!("a" in window)){
var a = 1;
}
alert(a);
我已经看过了相关解释,原因是变量声明会被提升,但是变量赋值并不会被提升,但还是不太明白。if语句块里面的代码到底有没有被执行?如果没有,变量的提升是哪条语句造成的?如果执行了,那么a的值应该就是1啊。
尝试了控制台输入以下代码
alert(b)//报错,b未被定义;
if (2>1){
var b=1;
}
alert(b)//1
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没有值
变量声明提升后变成一下代码
var a; // 这里变量声明提升了
if(!("a" in window)){
a = 1;
}
alert(a);
变量声明提升后,先定义了a,之后进入if语句,a是window的属性,取反之后变为false,所以if语句里面的代码没有执行,最后弹出来的就是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.
13 回答12.8k 阅读
7 回答2k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答935 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
if("a" in window)
var a = 1;
alert(a);