bind方法创建永久绑定this的新函数,不执行原函数,可预设参数;与call/apply关键区别在于延迟绑定,返回函数无法被new调用,且再次bind/call/apply无法改变已绑定的this。

bind 方法能创建一个新函数,把原函数的 this 永久绑定到指定对象上,之后无论怎么调用,this 都不会变。它不执行函数,只返回绑定后的新函数,这是和 call/apply 最关键的区别。
基本用法:绑定 this 并可预设参数
语法是 fn.bind(thisArg, arg1, arg2, ...)。第一个参数是将来函数内部 this 指向的对象,后面的参数会“固定”在新函数调用时的开头位置。
- 绑定 this 后,即使作为回调、事件处理器或赋值给变量,this 依然保持不变
- 预设参数(柯里化):比如
add.bind(null, 2)返回一个始终把第一个数固定为 2 的加法函数
常见场景:解决事件处理中的 this 丢失
类方法作为事件监听器时,this 容易丢失(指向触发元素而非实例)。用 bind 可提前锁定:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
对比 call 和 apply:bind 是“延迟绑定”
call 和 apply 立即执行函数,bind 不执行,只返回绑定后的新函数:
-
obj.method.call(context, a, b)→ 立即运行,this 是 context -
obj.method.bind(context, a)(b)→ 先绑定,再调用;等价于先固定 a,再传入 b - bind 返回的函数无法再被 new 调用(会忽略绑定的 this,改为指向新实例)
注意点:不能重复绑定覆盖
bind 生成的函数内部 this 是“不可修改”的——即使再用 bind、call 或 apply,也无法改变它已绑定的 this 值:
const obj = { name: 'A' }; const fn = function() { return this.name; }; const bound = fn.bind(obj); console.log(bound()); // 'A' console.log(bound.call({ name: 'B' })); // 仍是 'A',call 无效Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










