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對象上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM