# ❓ call 和 apply 的区别是什么,哪个性能更好一些
两者的作用是相同的。
第一个参数都是,指定函数体内
this
的指向第二个参数开始不同
apply
是传入带下标的集合,数组或者类数组,apply
把它传给函数作为参数,call
从第二个开始传入的参数是不固定的,都会传给函数作为参数。
call
的性能是比 apply
的性能要好一些的
apply 多了
CreateListFromArrayLike
的调用,其他的操作几乎是一样的(甚至apply
仍然多了点操作)。从草案的算法描述来看,call 性能 > apply 性能。
https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/84#issuecomment-599313971
尤其是 ES6 引入了 Spread operator (延展操作符) 后,即使参数是数组,可以使用 call
let params = [1, 2, 3, 4]
xx.call(obj, ...params)
1
2
2
在我们平时的开发中可以尽可能的去用 call
,特别是 ES6 的 reset 解构的支持,call
基本可以代替 apply
lodash 源码里面并没有直接用 Function.prototype.apply,而是在参数较少(1-3)个时采用 call
的方式调用
lodash 里面没有超过 4 个参数的方法,PS 如果一个函数的设计超过 4 个入参,那么这个函数就要考虑重构的问题了。