首页 >web前端 >js教程 >何时以及为何需要 JavaScript bind()?

何时以及为何需要 JavaScript bind()?

Linda Hamilton
Linda Hamilton原创
2024-10-24 16:54:021053浏览

When and Why is JavaScript bind() Necessary?

为什么JavaScript需要bind()?

理解JavaScript的上下文绑定

在JavaScript中,this的值由函数的调用上下文决定。但是,在使用回调函数或事件处理程序时,可能并不总是需要此上下文。

考虑以下示例:

<code class="javascript">this.name = "John";

var myName = {
  name: "Tom",
  getName: function() {
    return this.name;
  }
};

var storeMyName = myName.getName; // example 1
var storeMyName2 = myName.getName.bind(myName); // example 2
var storeMyName3 = myName.getName(); // example 3</code>

在示例 1 中调用 storeMyName() 会将其分配给全局范围,结果是“John”而不是预期的“Tom”。

Bind() 的需要

将函数执行委托给其他代码时,this 引用可能会变得不可预测。 bind() 允许您在调用函数之前手动设置 this 值。

在示例 2 中,使用 bind(myName) 调用 storeMyName2() 可确保将 this 值设置为 myName 对象,解决了问题在示例 1 中。

示例 3 和绑定与调用

示例 3 使用 myName.getName() 而不进行绑定,但仍然返回正确的值,因为在 getName() 时已正确设置该值函数被执行。这与示例 1/2 形成鲜明对比,示例 1/2 中函数被存储而不被执行。

主要区别

Approach Time of Invocation Time of this Binding
Function Object Future Future
Function Call Now Now
f.bind() Future Now

结论

bind() 在 JavaScript 中是必不可少的,当您需要控制将在不同上下文中执行的函数的 this 值。通过使用bind(),您可以防止意外行为并确保根据需要设置this引用。

以上是何时以及为何需要 JavaScript bind()?的详细内容。更多信息请关注PHP中文网其他相关文章!

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