javascript中bind方法用于创建永久绑定this值并预设参数的新函数,不立即执行;返回的新函数无论以何方式调用,this均保持绑定值,且支持柯里化,与call/apply的立即执行特性形成对比。

JavaScript 中使用 bind 方法可以创建一个新函数,该函数永久绑定指定的 this 值,无论之后如何调用都不会改变。
bind 的基本用法
bind 是函数对象的方法,调用后返回一个新函数。它接收至少一个参数:第一个是将来调用时的 this 值,后续参数会作为预设参数(partial application)传入原函数。
- 原函数不会被修改,
bind返回的是全新函数 - 绑定后的函数即使被赋值给其他变量、作为回调或在不同上下文中调用,this 仍保持绑定值
- 如果新函数被
new调用,this 会被覆盖为新实例(这是 bind 的特殊行为)
常见绑定场景示例
比如处理事件回调或定时器中丢失 this 的问题:
const obj = {
name: 'Alice',
greet() {
console.log(`Hello, I'm ${this.name}`);
}
};
<p>const boundGreet = obj.greet.bind(obj);
boundGreet(); // Hello, I'm Alice</p><p>// 即使脱离对象引用,this 依然正确
const loose = obj.greet;
loose(); // this 是 undefined(严格模式)或全局对象(非严格)
loose.bind(obj)(); // Hello, I'm Alice</p>
预设参数(柯里化)
bind 支持在绑定 this 的同时,提前填入部分实参:
function multiply(a, b, c) {
return a * b * c;
}
<p>const double = multiply.bind(null, 2); // 第一个参数固定为 2
double(3, 4); // 2 <em> 3 </em> 4 = 24</p><p>const triple = multiply.bind(null, 3, 4); // 前两个参数固定
triple(5); // 3 <em> 4 </em> 5 = 60</p>
注意:第一个参数为 this 值,若不需要特定 this,可传 null 或 undefined(非严格模式下会被替换为全局对象,严格模式下保持原值)。
与 call/apply 的区别
call 和 apply 立即执行函数并临时指定 this;bind 不执行,只返回绑定后的新函数,适合复用或延迟调用。
-
func.call(obj, 1, 2)→ 立即执行,this 是obj -
func.apply(obj, [1, 2])→ 立即执行,参数以数组传入 -
const bound = func.bind(obj, 1); bound(2);→ 分两步,this 和首参已固化
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











