call和apply性能对比

今天写基础库函数each时,看到jquery1.7.2中是分开两种方式执行回调的:call和apply,注释中说call会快些,于是在http://jsperf.com/做了如下测试

普通测试代码:
 



测试结果:

从这个普通例子来看,call的性能在某些浏览器下要明显比apply好,而其他浏览器中两者差别不大。

再来测试一下each方法:
测试代码:

注:上述代码中去掉了isFunction检查。

call测试:test(["1", "2", "3"],function(){})
apply测试:test(["1", "2", "3"],function(){})
测试结果:
由此可以看出call方法性能的优越性相当明显。
那么,是什么原因导致两个不同的测试结果呢?
我们再做一下几组测试:
1.带有参数,this指向null:
 
2.this不指向null,不带参数:
 
3.有this也有参数:


综合上述结果(时间关系,并不是所有示例都测试了一样多的浏览器,不过,基本覆盖了ie、ff、chrome),可以看出,当有this指向或者执行参数时,call的性能要明显优于apply。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值