apply (..) 与 call (..)
apply()与call()的区别是:
apply()方法接收的是一个参数数组call()方法接收的是参数列表
apply (..)
apply() 方法调用一个具有给定 this 值的函数,以及作为一个数组(或类似数组对象)提供的参数
语法
func.apply(thisArg, [argsArray]);
参数
-
thisArg可选参数。在
func函数运行时使用的this值。 -
argsArray可选参数。一个数组或类数组对象,其中的数组元素将作为单独的参数传给
func函数。如果参数值为
null或undefined,则表示不需要传入任何参数
返回值
调用有指定 this 值和参数的函数结果
call (..)
call(..) 方法用法和 apply(..) 一致,只是传入的参数不同:
语法
func.call(thisArg, argument1, argument2, ...);
参数
thisArg,this值argument1 ~ n参数列表
[ ] .slice .call ( arguments, 1 )
/**
* test something~
* @param fn {function} 回调函数
**/
function test(fn) {
let args = [].slice.call(arguments, 1);
args.push(233); // [fn, 233]
}
分拆代码:
[],空数组[].slice,相等于Array.prototype.slice(),即 Array 的原型链,而 slice 是原型链中的方法call(arguments, 1),将 test 函数传入的 fn 函数赋给 args 数组的 slice ,再由 slice 转换成数组
关于 slice 方法
slice 不修改原数组,只会返回一个潜伏之了原数组中的元素的一个新数组