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 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

小哥-晓戈

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值