bind方法通过硬绑定永久锁定函数的this指向目标对象,返回新函数且不执行原函数;支持预设参数(柯里化),绑定后this不可被call/apply覆盖,适用于事件监听、回调等易丢失上下文场景。

硬绑定就是用 bind 方法把函数的 this 永久锁定到某个对象上,之后无论怎么调用,this 都不会变。
bind 的基本用法
bind 返回一个新函数,这个新函数的 this 被固定为你传入的第一个参数。原函数本身不会被修改。
- 语法:
fn.bind(目标对象, arg1, arg2, ...) - 返回值:一个绑定了
this和部分参数的新函数(柯里化) - 调用方式:可以立即执行,也可以稍后调用,
this始终不变
为什么叫“硬绑定”?
因为即使你用 call、apply 或隐式绑定(比如作为方法调用)去强行改 this,也无效。
-
bind后的函数内部会忽略所有外部的this绑定 - ES5 规范规定:已绑定函数再次调用
bind、call、apply时,this不再改变 - 例如:
const bound = fn.bind(obj); bound.call(window);→this还是obj
常见使用场景
多用于事件监听、回调、定时器等容易丢失上下文的地方。
立即学习“Java免费学习笔记(深入)”;
- 事件处理:
btn.addEventListener('click', handleClick.bind(this)); - setTimeout 回调:
setTimeout(callback.bind(this, 'hello'), 1000); - 数组方法配合:
arr.map(fn.bind(null, prefix));(固定第一个参数)
注意点
硬绑定不可逆,且 bind 本身不执行函数,只返回新函数。
- 要执行,得手动加括号:
fn.bind(obj)(); - 箭头函数没有自己的
this,不能被bind改变(它继承外层作用域) - 多次
bind只有第一次生效,后续无效:fn.bind(a).bind(b)→this仍是a


















