在一次面试中被问到这样一个问题:
call和apply有什么优缺点?
这显然不是问它俩传递参数上面的那一点点区别,当时这个问题问的我也是一头雾水。
我自己面完下来百度了一下,大概就是说这两个有性能上的差距,说call的性能要高于apply,一些框架中也选择使用call来模拟apply,但是却没有人指出为什么会出现这样的性能差异?
有没有大神知道的啊,请指教### 问题描述
在一次面试中被问到这样一个问题:
call和apply有什么优缺点?
这显然不是问它俩传递参数上面的那一点点区别,当时这个问题问的我也是一头雾水。
我自己面完下来百度了一下,大概就是说这两个有性能上的差距,说call的性能要高于apply,一些框架中也选择使用call来模拟apply,但是却没有人指出为什么会出现这样的性能差异?
有没有大神知道的啊,请指教### 问题描述
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
3 回答867 阅读✓ 已解决
3 回答1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
确实有性能差异, 大概差5倍到8倍左右, 至于为什么的话, 个人觉得应该是底层算法实现的问题. 个人觉得不用过于纠结这个东西, 毕竟只谈性能不谈可维护性也是耍流浪啊. 比如原生的for和map这种. map虽然要慢, 但他可维护性, 写法 都好了很多.
function work(a, b, c) {
// 执行
}
var a = [1, 2, 3];
for (var j = 0; j < 4; j++) {
console.time('apply-ing');
for (var i = 0; i < 1000000; i++) {
}
console.timeEnd('apply-ing');
console.time('call-ing');
for (var i = 0; i < 1000000; i++) {
}
console.timeEnd('call-ing');
}
apply-ing: 42ms
call-ing: 5ms
apply-ing: 40ms
call-ing: 5ms
apply-ing: 42ms
call-ing: 5ms
apply-ing: 39ms
call-ing: 6ms
根据楼主的问题, 我也非常感兴趣研究了一下, 代码出自:
https://jsperf.com/call-apply...