You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何JavaScript链式调用bind会保留第一个绑定的上下文?

为什么链式调用bind时只有第一个绑定的上下文生效

这得从bind的本质说起:它会生成一个新的绑定函数,这个函数的核心逻辑就是——不管后续怎么折腾,调用原函数时都会把this牢牢锁在第一次绑定的对象上,后续的bind、call、apply都没法改这个this。

拆解你的代码执行步骤就懂了:

  • showName.bind(user):生成了一个新函数,咱们叫它fn1。fn1的本事就是:只要它被调用,不管外界给它传什么this,它都会把原函数showName的this固定成user。
  • 然后调用fn1.bind(user2):这时候是给fn1做绑定,但fn1本身已经是个“死心眼”的绑定函数了——它内部根本不看你新绑定的user2,调用的时候还是会按之前的规则,用user来执行showName。所以第二次bind等于白忙活。

你可以用一段简单的代码模拟bind的核心逻辑,一看就明白:

Function.prototype.myBind = function(context) {
  const originalFn = this;
  // 返回绑定后的新函数
  return function() {
    // 不管这个新函数被怎么调用,都用第一次传入的context当this
    return originalFn.apply(context, arguments);
  }
}

当你链式调用myBind(user).myBind(user2)时,第二个myBind返回的函数,调用时会触发第一个myBind的返回函数,而后者早就把this钉死在user上了,user2根本插不上手。

内容的提问来源于stack exchange,提问作者Lilo Randl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 10:10:34