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