bind方法返回新函数,固定this指向并预置参数;预置参数位于调用参数前,支持偏函数创建与事件回调安全使用,且绑定后不可被call/apply/再次bind修改。

bind 方法能同时完成两件事:固定函数内部的 this 指向,以及提前填入一部分参数。它不修改原函数,而是返回一个新函数,调用时自动带上预设内容。
锁定 this 并传入固定参数
当你需要确保函数执行时的上下文不变,又想省去每次调用都重复写相同参数,bind 就很合适。第一个参数是 this 值,后面的是要预置的实参。
- 如果 this 值不重要,可以传 null 或 undefined(严格模式下 this 为 undefined,非严格模式下指向全局对象)
- 预置参数会排在实际调用时传入参数的前面,顺序合并
- 例如:const logError = console.error.bind(console, '[ERROR]'); —— 后续调用 logError('timeout') 等价于 console.error('[ERROR]', 'timeout')
创建可复用的偏函数(Partial Function)
偏函数是指已固化部分参数的函数,适合封装常用组合逻辑。
- 比如乘法函数 function multiply(a, b) { return a * b; }
- 用 const double = multiply.bind(null, 2); 得到一个只接收第二个参数的新函数
- 再调用 double(7) 相当于 multiply(2, 7),结果是 14
- 支持预置多个参数:const fixedProduct = multiply.bind(null, 3, 4);,调用 fixedProduct() 直接得 12
在事件或回调中安全使用
绑定上下文和参数后,必须把返回的新函数真正用起来,否则等于没绑。
- DOM 事件中:btn.addEventListener('click', handler.bind(obj, 'user123'));
- React 类组件里,推荐在 constructor 中一次性绑定:this.handleClick = this.handleClick.bind(this, 'defaultId');
- 移除监听时必须复用同一个绑定函数引用,不能重复调用 bind —— 否则 removeEventListener 无法匹配
注意 bind 的不可变性
bind 返回的函数,其 this 和预置参数在创建时就确定了,后续无法被 call、apply 或再次 bind 改写。
- 即使对已 bind 的函数再调用 bind(obj2),this 仍保持最初绑定的对象
- 这种“固化”特性让它比箭头函数更可控,尤其在需精确控制 this 和参数顺序的场景
- 但它不会自动注册事件,也不会改变原函数——你得主动赋值、传递或调用










