JS中call和apply的区别
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的指向,第二个参数则是一个数组,其中包含了函数运行时的参数。