bind方法的核心作用是固定函数内部this指向并返回新函数,不立即执行;可预设this值及前置参数,支持柯里化,且绑定后this不可被call/apply覆盖。

bind 方法的核心作用就是**固定函数内部的 this 指向,并返回一个新函数,不立即执行原函数**。
预设 this 指向:传入第一个参数
调用 fn.bind(obj) 时,obj 就会成为新函数执行时的 this 值,无论后续如何调用(包括作为回调、事件处理函数、定时器等)。
- 即使新函数被赋值给另一个变量、或在不同上下文中调用,
this依然绑定为最初传入的对象 - 如果传入
null或undefined,非严格模式下this指向全局对象(如window),严格模式下保持null/undefined
同时预设部分参数:柯里化(Partial Application)
bind 的第二个及之后的参数,会作为“前置参数”被固定下来,新函数调用时,这些参数会自动排在最前面。
- 例如:
add.bind(null, 2)返回一个新函数,调用它时相当于add(2, ...args) - 这不同于
call或apply—— 它们是立即执行,而bind是延迟执行 + 预设
返回的是新函数,不是执行结果
bind 不会运行原函数,只生成一个“定制版”的新函数。你需要显式调用它才会执行:
-
const boundFn = obj.method.bind(otherObj, 'a');→ 此时没执行 -
boundFn('b');→ 才真正执行,this是otherObj,参数是'a', 'b'
和箭头函数的区别
箭头函数没有自己的 this,它继承外层作用域的 this;而 bind 是显式强制绑定,且不可被后续的 call/apply 覆盖(除非再次 bind):
- 已用
bind绑定的函数,再调用call(obj2)也不会改变this - 但可以再次
bind,产生新的绑定(后一次生效)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











