call,apply和bind有什么区别?

call,apply和bind有什么区别?

面试中,面试官也会经常问call,apply和bind的区别,那么我们应该如何回答呢?
答:call和apply用来指定函数的上下文。比如fn.call(obj)或者fn.apply(obj)此时fn将以obj作为上下文(this)运行。call和apply的区别体现在参数的传递上,比如fn需要接受参数a,b,c。
此时两者的语法不同:

  fn.call(obj , a , b, c,d,m,e);
  fn.apply(obj , [a,b,c,e,f]);

此时,可以回答:call如果需要传递第二个参数的时候,需要的是散值,而apply需要传递第二个参数时候,第二个参数要是数组,这就是它们的区别,在工作中,经常会利用apply“传递数组能够将数组变为零散参数”的特性,巧妙应用它,比如做数组的最大值:Math.max.apply(null , arr); 轻松计算arr的最大值。
但是现在ES6中有了…解构的运算符,此时可以用Math.max(…arr)轻松计算了。
最后,bind()也是用来终身绑定一个函数的上下文,此时这个函数无论用何种方法调用,上下文一定是这个绑定的上下文。当然,箭头函数也非常常用,箭头函数生来就固定了上下文,call和apply是无效的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值