1. 程式人生 > >let,const 宣告的變數不會繫結給window物件 而var會

let,const 宣告的變數不會繫結給window物件 而var會

先來看一道題

let id = 2;
let json = {
     id: 1,
     show:function(){
         setTimeout(function(){
           console.log(this.id);
        },2000)
    }
}
json.show();

  假設沒有頭部的let id = 2;  那麼程式碼會輸出undefined表示id未定義

加上let id = 2;呢  結果還是顯示undefined。這是為什麼,不是什麼聲明瞭一個全域性變數let id = 2;了嗎

那麼這裡的this.id的this指的是window物件就有id值了呀??

其實不是的,

如果我們把let id = 2;換成var id = 2;那麼window物件就能呼叫id值了。

因為let  const定義的變數由於作用域,並不會繫結到window上。

 

補充:

  為什麼this指向window?

  因為json.show();呼叫的時候,this先繫結到json身上,但是進入setTimeout這個函式裡後,並命有明確的指出誰呼叫的setTimeout

所以this由json失效繫結到預設的window物件上。