bind是JavaScript中显式绑定函数this指向并返回新函数的方法,它不立即执行原函数,而是生成预设this和部分参数的新函数,支持柯里化且this绑定不可逆。

bind 是 JavaScript 中用于**显式绑定函数 this 指向并返回一个新函数**的方法,它不会立即执行原函数,而是生成一个“预设好 this 和部分参数”的新函数。
基本用法:绑定 this 并返回新函数
调用 fn.bind(thisArg, arg1, arg2, ...) 会返回一个新函数,该函数内部的 this 永远指向 thisArg,且调用时会把 arg1, arg2, ... 作为前置参数传入。
- 如果只传
thisArg,就只固定 this,不预设参数 - 后续调用新函数时传入的参数,会追加在预设参数之后
- 原函数本身不受影响,不会被修改
常见使用场景示例
比如处理事件回调或定时器中 this 丢失问题:
const obj = {
name: 'Alice',
greet() {
console.log(`Hello, ${this.name}`);
}
};
const btn = document.getElementById('myBtn');
// 直接传 greet,点击时 this 指向 btn,不是 obj → 输出 "Hello, undefined"
btn.addEventListener('click', obj.greet);
// 用 bind 固定 this 指向 obj,返回新函数
btn.addEventListener('click', obj.greet.bind(obj)); // 正确输出 "Hello, Alice"
配合参数预设(柯里化)
bind 支持预填部分参数,实现轻量级柯里化:
立即学习“Java免费学习笔记(深入)”;
-
add.bind(null, 5)返回一个新函数,调用时自动以5为第一个参数 - 预设参数后,仍可传入更多参数,它们会拼接到后面
function add(a, b, c) {
return a + b + c;
}
const add5 = add.bind(null, 5); // 预设 a = 5
console.log(add5(10, 15)); // 5 + 10 + 15 = 30
注意 bind 的不可逆性与限制
bind 后返回的函数,其 this 无法再被 call/apply 覆盖(除非是箭头函数或严格模式下非对象 thisArg),且不能再次用 bind 覆盖已绑定的 this(多次 bind 只有第一次生效)。
- bind 返回的函数是普通函数,不是箭头函数,有自己的 this(但已被锁定)
- new 调用 bind 后的函数时,this 会忽略绑定值,指向新实例(符合构造函数行为)
- 不能通过
call(obj2)强行改变 bind 后函数的 this


















