在 JS 中 函数是 Function 对象。Function 原型中有 call
和 apply
两个函数对象的实例方法,用来调用此函数(或者说执行此函数。)
以 function 函数对象为例,call
实例方法的调用语法如下:
function.call(thisArg, arg1, arg2, ...)
apply
实例方法的调用语法如下:
function.apply(thisArg, [argsArray])
call
实例方法的调用与 apply
实例方法的调用只是函数执行时参数传递语法有所差别。
以前我经常忘记 apply
和 call
调用的参数的区别。
后来我思考了一下,可以这样记:
apply, array, arguments 这几个都是以 a
开头的单词,这样关联记忆之后就可以很简单的记住 apply
调用时需要传递的参数是一个 array
或者 array-like
的数组
apply 经常用于已有的函数参数是数组的情况,函数的调用场景。
比如。向一个数组 append
另一个数组, 可以使用数组的 push
方法,又因为 push
方法支持多个参数。
arr.push(element1[, ...[, elementN]])
那此时就可以使用 arr.apply(arr,anotherArray)
的方式将 anotherArray
append 进 arr
上。
还比如说求数组的最大值。 Math.max.apply(null, nums)
PS: 使用 ES 6 的语法上面的例子也可以不用 apply
转而使用数组解构语法,比如:
arr.push(...anotherArray)
与 Math.max(...nums)