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

已经被bind绑定的函数能否再次使用bind方法进行绑定?

问题结论

这个问题完全属于this绑定规则的范畴,二次bind不生效是JavaScript硬绑定的固有特性。

核心原因

Function.prototype.bind的作用是返回一个新的绑定函数,这个新函数内部已经锁死了原始函数的this指向,后续对这个返回的绑定函数再次调用bind,只会修改绑定函数本身的this,不会影响已经被锁死的原始函数的this指向。

我们可以用简化的bind实现逻辑来理解:

Function.prototype.myBind = function(context, ...args) {
  const originalFn = this; // 保存原始函数,也就是例子中的sayName
  return function(...newArgs) {
    // 执行的时候永远用第一次绑定的context调用原始函数
    return originalFn.apply(context, args.concat(newArgs));
  }
}

对应你的代码逻辑:

  1. sayName.bind(a)返回的绑定函数,内部已经固定原始sayName执行时的this为a
  2. 再调用.bind(b)的时候,是给第一步返回的绑定函数绑定this为b,但这个绑定函数执行时,内部还是会用第一次存的a作为context调用sayName,自然不会生效。

补充规则

this绑定的优先级从高到低为:new绑定 > 硬绑定(bind/apply/call)> 隐式绑定 > 默认绑定,硬绑定一旦完成,除了new调用,其他绑定方式都无法覆盖原始函数的this指向。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:45:06