首頁 > web前端 > js教程 > 主體

為什麼「this」不引用 JavaScript 回呼中的呼叫函數?

Susan Sarandon
發布: 2024-11-04 05:21:01
原創
884 人瀏覽過

Why Doesn't 'this' Refer to the Calling Function in JavaScript Callbacks?

當this 爭論時:理解回調函數中的'this'

在JavaScript 中,函數調用中this 的值由執行該函數的上下文。然而,當將 this 作為參數傳遞時,規則可能會變得複雜。

具體來說,會出現以下情況:當回呼函數作為參數傳遞時,為什麼不將 this 設定為呼叫的函數回呼?

理解'this' 的層次結構

要理解為什麼this 被設定在它所在的位置,我們需要考慮函數呼叫的層次結構:

  • obj.prepareRandomFunction() 將this 設為obj (答案中的規則#2)。
  • randomFunction(this.sumData.bind(this)) 傳遞 this.sumData.bind(this ) 作為參數(規則 #1)。
  • 在 randomFunction 內部,callback(data) 將其設為全域物件(規則 #1)。

但是,在 randomFunction 呼叫之前回調,它使用 this.sumData.bind(this) 建立一個新函數(規則#5)。這個新函數呼叫原始回呼函數,但現在將 this 綁定到 obj(傳遞給 bind 的參數)。

回調函數的意義

傳遞方法時作為回調,了解它不會被稱為 obj.method() 至關重要。這意味著 this 在回呼函數中不會有正確的值。若要解決此問題,您可以使用 bind() 在回呼中設定 this 的值。

其他有用的註釋

  • 中的規則#6答案描述了ES6 箭頭函數如何維護this 的當前詞法值,即使在回調函數中也是如此。
  • .apply() 和 .call() 可用來建立具有特定 this 值的新函數呼叫。
  • bind() 可用來建立新函數,這些函數使用自訂值 this 呼叫原始函數。
  • 理解 this 的複雜本質對於有效的 JavaScript 編碼和掌握諸如此類的概念至關重要回調。

以上是為什麼「this」不引用 JavaScript 回呼中的呼叫函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板