为什么js要设计两个如此相似的api出来呢?
我觉得,有apply就够了呀。
有没有大佬出来讲一讲。
注意我问的不是这两个api怎么用,用在什么场景下。我知道他们的区别,但我不明白这样设计的意图。
为什么js要设计两个如此相似的api出来呢?
我觉得,有apply就够了呀。
有没有大佬出来讲一讲。
注意我问的不是这两个api怎么用,用在什么场景下。我知道他们的区别,但我不明白这样设计的意图。
谈一谈个人的理解。
首先,在MDN里面,call是在ECMAScript第一版的规范里面规定的。而apply是在第三版的规范里面出现的。
call比apply更早出现。
其次,apply其实是对call的一个封装,apply性能会比call更差。可以把apply看成是call的一个语法糖。
apply的使用有时候更加方便,因为他会自动帮你把数组展开。但有时候你也并不想直接展开,而是直接传递一个数组。
反了。
先有的 call
,再有的 apply
。
但 call
有先天不足,即必须显式的提前声明好这些形参。
你要非刨根问底的为啥不最开始一步到位直接有 apply
,那只能说制订 ECMA-262 那帮人当时没考虑到。
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
3 回答860 阅读✓ 已解决
3 回答1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
一开始确实只有
call
,后来估计方便开发者处理参数引入了apply
,但也导致apply
的性能不如call
。lodash库居然还定义了一个“更快的apply”,其内部就是利用call
: