bind方法返回新函数实现永久绑定this,不受调用方式影响;必须接收返回值才能使用;支持预设参数;区别于箭头函数的词法绑定和call/apply的临时绑定。

bind 方法本身就能永久绑定 this,关键在于正确使用它。它不会修改原函数,而是返回一个新函数,这个新函数的 this 值在调用时永远固定为你传入的第一个参数,不受后续调用方式影响(比如作为事件回调、被赋值给变量、或被其他函数调用)。
bind 返回的新函数,this 不可再被改变
一旦用 bind 绑定了 this,无论怎么调用该函数,其内部 this 都不会变:
- 即使通过
call/apply显式传入其他对象,也无效 - 即使作为对象方法被调用(
obj.fn()),this仍保持 bind 时指定的对象 - 即使作为事件监听器(
btn.addEventListener('click', boundFn)),this也不会变成btn
常见误用:忘了接收并使用返回的新函数
bind 不会改造原函数,必须显式接收返回值:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- ❌ 错误写法:
obj.method.bind(otherObj);—— 返回值被丢弃,原函数没变 - ✅ 正确写法:
const boundFn = obj.method.bind(otherObj);,然后调用boundFn() - 也可直接调用:
obj.method.bind(otherObj)();(立即执行绑定后的函数)
配合参数预设,实现更灵活的“永久绑定”
bind 第一个参数是 this,之后的参数会被**预先填充**(partial application):
const greetJohn = person.sayHello.bind(person, 'John');- 调用
greetJohn('morning')相当于person.sayHello('John', 'morning') - 此时
this永远是person,且第一个参数永远是'John'
对比 arrow 函数和 call/apply
箭头函数确实“没有自己的 this”,会继承外层作用域的 this,但它不是“绑定”,而是词法绑定,且无法用 call/apply 改变;而 bind 是显式、可预测、可复用的硬绑定。相比之下,call 和 apply 只是**单次调用时临时指定 this**,不产生新函数,也不“永久”。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










