首頁  >  問答  >  主體

javascript - 以下程式碼為何輸出為「undefined」?

程式碼如下:

if(!("a" in window)){
    var a = 1;
}
alert(a);

我已經看過了相關解釋,原因是變數宣告會被提升,但是變數賦值並不會被提升,但還是不太明白。 if語句區塊裡面的程式碼到底有沒有被執行?如果沒有,變數的提升是哪一語句造成的?如果執行了,那麼a的值應該就是1啊。
嘗試了控制台輸入以下程式碼

alert(b)//报错,b未被定义;
if (2>1){
    var b=1;
}
alert(b)//1
迷茫迷茫2686 天前720

全部回覆(6)我來回復

  • 巴扎黑

    巴扎黑2017-06-12 09:32:20

    if("a" in window)
    var a = 1;
    alert(a);

    回覆
    0
  • PHP中文网

    PHP中文网2017-06-12 09:32:20

    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沒有值

    回覆
    0
  • 巴扎黑

    巴扎黑2017-06-12 09:32:20

    我用你的程式碼結果彈出1

    回覆
    0
  • 漂亮男人

    漂亮男人2017-06-12 09:32:20

    變數宣告提升後變成一下程式碼

    var a; // 这里变量声明提升了
    if(!("a" in window)){
        a = 1;
    }
    alert(a);

    變數宣告提升後,先定義了a,之後進入if語句,a是window的屬性,取反之後變成false,所以if語句裡面的程式碼沒有執行,最後彈出來的就是undefined

    回覆
    0
  • 给我你的怀抱

    给我你的怀抱2017-06-12 09:32:20

    var a;
    if(!(a in window)){

    var a = 1;

    }
    alert(a);
    if不成立裡面的程式碼當然不會執行了 所以a是undefined沒毛病

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦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.

    回覆
    0
  • 取消回覆