bind 用于永久绑定函数的 this 指向并可预设参数,返回新函数而非修改原函数;绑定后 this 不可被 call/apply/调用方式改变,箭头函数无需且无法使用 bind。

bind 的作用就是永久绑定函数的 this 指向,只要正确调用它,返回的新函数就再也不会受调用方式影响。
bind 返回的是一个新函数,不是修改原函数
bind 不会改变原始函数本身,而是创建并返回一个“绑定后”的新函数。你需要把这个新函数保存起来(比如赋值给变量),之后都使用它:
- 错误写法:
obj.method.bind(obj);—— 返回了新函数但没保存,原调用时仍会丢失 this - 正确写法:
const boundMethod = obj.method.bind(obj); boundMethod(); - 也可以直接在需要的地方绑定并使用:
button.addEventListener('click', obj.handleClick.bind(obj));
bind 后的函数无法被再次修改 this
一旦用 bind 绑定了 this,无论后续如何调用(包括通过 call、apply、事件触发、对象属性访问等),this 都不会变:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
const fn = function() { return this.value; }.bind({ value: 42 });fn(); // 42fn.call({ value: 100 }); // 还是 42,call 无效const obj = { fn }; obj.fn(); // 仍是 42,不是 obj
可以预设参数(柯里化),不影响 this 绑定
bind 的第二个及以后参数会作为前置参数固定传入,和 this 绑定互不干扰:
function greet(greeting, punctuation) { return `${greeting}, ${this.name}${punctuation}`; }const bound = greet.bind({ name: 'Alice' }, 'Hello');-
bound('!'); // "Hello, Alice!"—— this 和第一个参数都已固化
箭头函数不需要 bind,因为它没有自己的 this
如果你只是想让回调里的 this 指向外层,用箭头函数更简洁:
- 替代
obj.doSomething.bind(obj),可写成() => obj.doSomething() - 注意:箭头函数的 this 是定义时继承的词法作用域,不是调用时决定的
- bind 对箭头函数无效(因为箭头函数没有可绑定的 this)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










