call 和 apply 的区别

相同点:都是为了改变this的指向

call 和 apply 都是 function 原型上的方法,而每一个函数作为 function 一个实例,所以可以调取原型上的 call 和 apply 方法。

不同点:传参的类别不同

call 第二个参数开始接受一个参数列表

apply第二个参数开始接受一个参数数组

toString.call([],1,2,3);
toString.apply([],[1,2,3]);
let array = [1,2,3], obj = {};
function fun(a,b,c){}
//a = 1,b = 2,c = 3
fun.apply(obj,array);
//a = [1,2,3] b = c = undefined
fun.call(obj,array);
//ES6的展开运算符,这时a = 1,b = 2,c = 3
fun.call(obj,...array);

 

类似功能的方法还有一个 bind ,但是 bind 没有把函数立即执行,而是预先处理改变this

哪个性能会好一点

参数在三个以内,call 和  apply 的性能差不多,

参数超过三个,call 的性能要比 apply 的好一点


性能测试,很多工具都可以测出一段代码的性能和效果

自己也可以简单的测试一下性能,但是因为cpu、内存等电脑当前性能不会一直不变,所以测出来的性能会有差别。

如果想要测试一段代码的执行时间

1. 可以在代码执行之前获取一下当前之间,执行之后获取一个时间,两者相减得到运行代码的时间

2.console 有个方法,console.time()可以监控时间,

console.time('ti');

// 想要测时间的代码

console.timeEnd('ti');

3. 在火狐浏览器上可以先安装FireBug,使用console.profile(),可以更精准的获取当前时间

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值