JavaScript为什么多次绑定只有一次生效?

本文深入探讨了JavaScript中bind方法的工作原理,特别是在连续调用bind时的行为特性。通过具体的代码示例,揭示了无论foo执行多少次bind,都只认第一次bind的对象这一关键结论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接上篇文章JavaScript重识bind、call、apply

1、 先看一段代码:

function foo() {
    console.log("name: " + this.name);
}
var obj = { name: "obj" }, obj2 = { name: "obj2" }, obj3 = { name: "obj3" };
foo.bind(obj).call(obj2)  // name: obj
foo.bind(obj).bind(obj2)()  // name: obj
复制代码

所以为什么bind只有第一次bind生效呢?

解释

这里想简单解释一下; foo.bind(obj).bind(obj2)() 从左到右执行;

  1. foo.bind(obj) 返回一个函数,这个函数其实回去执行 apply的操作,叫foo1; 那么在这次绑定是的是 foo.apply去绑定 obj;
  2. 然后 foo.bind(obj) 返回的这个函数,我们暂且称作fooB, 然后fooB.bind(obj2)又会返回一个要去执行apply的函数,叫 foo2; 就是foo.bind(obj).bind(obj2)了
  3. foo.bind(obj).bind(obj2)();

bind分解.png

结论

所以无论foo执行多少bind 都是第一次bind的对象!

后面的bind只能改变上一个bind的this指向,例如foo.bind(obj).bind(obj2) 改变的是 foo.bind(obj)的this指向是obj2; 最终foo执行是的绑定的this是由第一次bind的对象决定,即foo.bind(obj)的obj

转载于:https://juejin.im/post/5cb7e348e51d456e7b37206d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值