bind方法返回新函数,永久绑定this并预设参数,无法被call/apply覆盖,支持柯里化,常用于事件处理、回调和工具函数定制。

显式绑定在 JavaScript 中通过 bind 方法实现,它会返回一个**新函数**,该函数内部的 this 被永久绑定到指定对象,且无法被后续调用改变。
bind 的基本用法
bind 接收至少一个参数:第一个是将来调用时 this 指向的对象;后续参数是预设(固定)的实参,会在新函数被调用时自动前置传入。
- 返回的是函数,不是立即执行结果
- 绑定后的
this不可被call、apply或隐式调用覆盖 - 支持柯里化(预设部分参数)
绑定 this 并预设参数
例如有一个加法函数和上下文对象:
function add(a, b) {
return this.base + a + b;
}
const obj = { base: 10 };
const boundAdd = add.bind(obj, 2); // this 绑定 obj,a 固定为 2
console.log(boundAdd(3)); // 输出 15(10 + 2 + 3)
这里 boundAdd 是新函数,调用时 this 始终是 obj,第一个实参 2 已固化,只需传入剩余参数。
bind 后无法再修改 this
即使你用 call 或 apply 尝试改写 this,也不会生效:
function logThis() {
console.log(this);
}
const bound = logThis.bind({ name: 'Alice' });
bound.call({ name: 'Bob' }); // 仍输出 { name: 'Alice' }
这是 bind 和 call/apply 的关键区别:后者是**临时调用**,前者是**永久绑定**。
常见用途场景
常用于事件处理、回调传参、构造函数偏应用等:
- 按钮点击中保持类实例的
this:button.addEventListener('click', this.handleClick.bind(this)) - 创建工具函数变体:
const toFixed2 = Number.prototype.toFixed.bind(null, 2) - 模拟部分实现的
partial:const multiplyBy2 = (x) => x * 2; const double = multiplyBy2.bind(null, 2)(注意此处需调整函数结构)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











