如何要判斷一個運行中函數的 this 綁定

來自你不知道的JavaScript安全

若是要判斷一個運行中函數的 this 綁定,就須要找到這個函數的直接調用位置。找到以後
就能夠順序應用下面這四條規則來判斷 this 的綁定對象。app

  1. 由new調用?綁定到新建立的對象。函數

  2. 由call或者apply(或者bind)調用?綁定到指定的對象。this

  3. 由上下文對象調用?綁定到那個上下文對象。對象

  4. 默認:在嚴格模式下綁定到undefined,不然綁定到全局對象。
    必定要注意,有些調用可能在無心中使用默認綁定規則。若是想「更安全」地忽略 this 綁 定,你能夠使用一個 DMZ 對象,好比 ø = Object.create(null),以保護全局對象。繼承

ES6 中的箭頭函數並不會使用四條標準的綁定規則,而是根據當前的詞法做用域來決定 this,具體來講,箭頭函數會繼承外層函數調用的 this 綁定(不管 this 綁定到什麼)。這 其實和 ES6 以前代碼中的 self = this 機制同樣。ip

相關文章
相關標籤/搜索