首页  >  文章  >  web前端  >  为什么“this”不引用 JavaScript 回调中的调用函数?

为什么“this”不引用 JavaScript 回调中的调用函数?

Susan Sarandon
Susan Sarandon原创
2024-11-04 05:21:01884浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn