先來看一道題
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對象上。
