javascript - 我怎么知道什么时候在 JS 函数上使用 .bind()?

标签 javascript function scope this bind

(我知道 this 问题,但答案并不能完全告诉我我需要知道什么。)

我遇到过需要使用 .bind() 的情况在 JavaScript 中的函数上,以便将 this 或局部/类变量传递给函数。但是,我仍然不知道什么时候需要它。

知道 this 或局部/类变量何时在函数中可用或不可用的标准是什么?你是怎么推理的?

例如:

  • 何时创建、包装或传递新的匿名 function() { }
  • 当使用 class 成员函数、class getter/setter 函数或旧式 prototype.function“成员函数”(的作为一个类的函数)?
  • 在全局范围内?
  • forforEach 循环或它们的任何变体中?
  • 在闭包外部或内部函数中?
  • 在各种 JS 操作中,例如 Array.prototype.forEach.call()[].forEach.call()?
  • 在各种JS库和脚本中,有哪些可能有自己自定义实现的东西?

我问的主要原因是要注意潜在的陷阱,避免依赖反复试验。

最佳答案

Mozilla 开发者网络有一些关于 this 的优秀文档指定不同的情况:

  1. > Global context
  2. > Function context
  3. > using bind
  4. > with arrow functions
  5. > in object methods
  6. > in an object constructor
  7. > in DOM event handlers

查看链接以了解 this 在不同上下文中的工作方式,以及何时应使用 bind 强制绑定(bind)不同的 this 函数上下文。

通常,bind 用于转移函数的“所有权”。具体来说,根据我的经验,在创建类之前使用它来强制将对象方法绑定(bind)到相关对象。它在使用箭头函数时也很有用,因为箭头函数有不同的上下文。

关于javascript - 我怎么知道什么时候在 JS 函数上使用 .bind()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57714243/

相关文章:

c# - 如何将可空字符串作为函数参数处理

javascript - 在 JavaScript 和变量作用域中嵌套函数?

javascript - 提交时的 AngularJS 验证

javascript - 如何使用 JavaScript 在页面中生成不同 HTML 标签的列表(必须在 IE6 中工作)

javascript - 外部函数 "store"如何获取内部函数的参数?

PHP OOP MySQL (WAMP) 变量作用域

javascript - 无法通过 'this' 访问属性

javascript - 带有 gstreamer 的 JSMPEG 相机流

JavaScript 数组到 URL 编码 - obj 中的 wthis 数组

php - 在没有 die() 或 exit() 的情况下结束 php 标签