程式碼如下:
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.