bind方法用于创建this永久绑定指定对象的新函数,支持预设参数(柯里化),不立即执行;常用于事件回调、定时器等防this丢失场景,与call/apply的本质区别在于延迟执行而非即时调用。

bind 方法用于创建一个新函数,这个新函数无论怎么调用,this 始终指向你指定的对象——也就是“硬绑定”。
bind 的基本用法
调用 fn.bind(obj) 会返回一个新函数,它内部的 this 被永久绑定到 obj,后续无法被 call、apply 或隐式调用改变。
- 原函数不会被修改,bind 返回的是全新函数
- 可以预设部分参数(柯里化),比如
fn.bind(obj, a, b) - 绑定后的新函数仍可传入更多参数,在真正执行时合并
常见硬绑定场景
最典型的是事件回调或定时器中避免 this 丢失:
- 对象方法传给
setTimeout或addEventListener时,直接传会丢失 this - 用
obj.method.bind(obj)确保执行时 this 指向 obj - React 类组件中常在 constructor 里写
this.handleClick = this.handleClick.bind(this)
和 call/apply 的关键区别
call 和 apply 是立即执行并临时指定 this;bind 不执行,只返回绑定后的函数,等你之后调用。
-
fn.call(obj, 1, 2)→ 立即执行,this 是 obj -
fn.bind(obj, 1)(2)→ 先绑定,再执行,this 还是 obj,参数分两次传 - bind 返回的函数即使被赋值给其他变量或作为回调,this 也不会变
注意:箭头函数无法被 bind 改变 this
箭头函数没有自己的 this,它继承外层作用域的 this,所以 arrowFn.bind(obj) 无效,this 保持原样。
- 如果需要硬绑定,别用箭头函数定义要绑定的方法
- 普通 function 声明或 class 中的方法才支持 bind
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











