javascript - 以下程式碼為何輸出為「undefined」?
迷茫
迷茫 2017-06-12 09:30:20
0
6
718

程式碼如下:

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.

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!