Javascript 是否存在使用bind不能满足使用call或apply的需要的情况?

Javascript 是否存在使用bind不能满足使用call或apply的需要的情况?,javascript,Javascript,我正在通过学习javascript。 我学习了bind(以及之前关于call和apply的课程) 我看到关于这三个方面差异的询问 读完所有这些之后,我想知道:是否存在这样一种情况:使用bind无法满足使用call或apply的需要? 我的意思是,call或apply用于立即调用函数绑定-稍后 在所有情况下,下列操作是否都有效 let f = function(){/* code here */}; let errorFreeF = f.bind(myContextObj); errorFreeF

我正在通过学习javascript。 我学习了
bind
(以及之前关于
call
apply
的课程) 我看到关于这三个方面差异的询问

读完所有这些之后,我想知道:是否存在这样一种情况:使用
bind
无法满足使用
call
apply
的需要? 我的意思是,
call
apply
用于立即调用函数<代码>绑定-稍后

在所有情况下,下列操作是否都有效

let f = function(){/* code here */};
let errorFreeF = f.bind(myContextObj);
errorFreeF(); 
不太详细的代码段:

function(){/* code here */}.bind(myContextObj)();
如果答案是使用bind总是安全的,并且确实涵盖了所有场景,那么在未来的JS版本中调用/应用可能会被弃用?或者性能更差?

您可以使用
.bind
替代
。调用
。应用
。如果需要,可以将
.call
.apply
的所有用法转换为
.bind

其他组合也是正确的。如果确实需要,还可以将这些方法的所有实例替换为
.call
,或者替换为
.apply

只是有时候这样做很不雅观。出于类似的原因,即使可以使用
Array.prototype.forEach
来识别与数组中的条件匹配的元素,
Array.prototype.find
更合适,并且需要更少的代码

在未来的JS版本中,调用/应用可能会被弃用

不,有几个原因:

  • 它们是非常有用的方法(与使用
    .bind
    编写相同的代码相比,它们可以产生更干净的代码)
  • 使用
    .bind
    创建函数。在极少数情况下,创建函数所产生的额外开销可能是一个问题。(但是
    .call
    .apply
    只调用函数,不创建函数)
  • 语言设计人员永远不会实现更改(例如删除
    .call
    .apply
    ),因为这将破坏现有网站,而现有网站是不可用的

不仅仅是更少的代码,而且我的直觉还告诉我,使用
调用
应用
在一个紧密的循环中会比重复地重新绑定到不同的上下文有更好的性能,在99%正在编写/分析的代码块中,性能几乎从来都不是一个问题。是的,尽管我整个上午都在关注性能敏感的代码,所以我想这就是目前的情况!您的“否”不应该是“是”:(我问您,如果使用在现场调用绑定函数,是否总是不能完成任务-似乎您说是的,它会)。关于更优雅/不太冗长的代码,我的示例当然应该是
function(){}.bind(myContext)(
;使用bind仍然会更加冗长,但潜在的问题是:如果bind对于每个场景都足够了,为什么不反对其他场景呢?也许它的性能比其他的更差。。。