Heim > Fragen und Antworten > Hauptteil
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
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.