JavaScript中bind无输出但apply有输出的原因咨询
为什么使用
bind()没有输出,而apply()可以? 这是个很常见的新手疑问,核心在于bind()和apply()的设计初衷完全不同:
apply()会立即调用目标函数,同时将函数内部的this绑定为你传入的对象,还能通过第二个数组参数给函数传递参数。bind()则是返回一个新的函数——这个新函数的this已经被固定为你传入的对象,但它不会自动执行,必须手动调用它才会产生效果。
回到你的代码例子:
person.showFullName.bind(anotherPerson); // 仅创建绑定后的新函数,未执行 person.showFullName.apply(anotherPerson); // 立即调用函数,绑定this到anotherPerson
要让bind()产生输出,你需要把它返回的新函数存起来,然后调用它:
// 先创建绑定好上下文的函数 const boundFullName = person.showFullName.bind(anotherPerson); // 手动调用这个新函数 boundFullName(); // 输出:Rohit Khan
另外补充个小知识点:bind()还支持预先给函数绑定部分参数(也就是柯里化),比如如果你的showFullName有额外参数,也可以在bind的时候提前传入,后续调用时只需要传剩下的参数就行,这也是它和apply/call的一个重要区别。
内容的提问来源于stack exchange,提问作者Ravindra babu
相关产品推荐
相关产品推荐

