JS中call和apply的区别

Yang 最新问题 177

JavaScript中的call和apply的区别:1、参数传递方式不同;2、使用场景的差异;3、实现方式的差异;在使用call方法时,需要将上下文对象作为名列前茅个参数传递,然后按顺序传递函数的参数。使用apply方法时,函数的参数需要放在一个数组(或类数组对象)内,作为第二个参数传递。

一、参数传递方式不同

call方法接受的是若干个参数列表,名列前茅个参数表示要改变上下文的对象,后面的参数表示要传递给函数的参数。

apply方法接收的是两个参数,名列前茅个参数表示要改变上下文的对象,第二个参数则是一个包含多个参数的数组。

二、使用场景的差异

call方法适合参数数量固定的情况,例如,知道要传递给函数的参数具体有哪些时,可以使用call方法。

apply方法适用于参数数量不确定的情况,例如,不知道要传递给函数的参数有多少个时,或者参数以数组形式存在时,可以使用apply方法。

三、实现方式的差异

在使用call方法时,需要将上下文对象作为名列前茅个参数传递,然后按顺序传递函数的参数。例如:fun.call(obj, arg1, arg2, arg3)。

使用apply方法时,上下文对象仍然作为名列前茅个参数,但是函数的参数需要放在一个数组(或类数组对象)内,作为第二个参数传递。例如:fun.apply(obj, [arg1, arg2, arg3])。


延伸阅读

1、call的概念

call是Function.prototype的一个方法,它的主要作用是改变函数体内this的指向,并且可以接受参数列表,名列前茅个参数用于指定新的this的指向,后面的参数则是函数运行时的参数。

2、apply的概念

apply同样是Function.prototype的一个方法,它的功能与call方法类似,都是用来改变函数体内this的指向,不同之处在于apply接受两个参数,名列前茅个参数指定新的this的指向,第二个参数则是一个数组,其中包含了函数运行时的参数。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部