apply的核心作用是将数组展开为参数列表传入函数,语法为func.apply(thisArg, [argsArray]),其中thisArg指定this指向,argsArray为数组或类数组对象。

apply 的核心作用就是把数组“展开”成参数列表,传给函数调用。
基本语法和原理
函数对象的 apply 方法接收两个参数:
- 第一个参数是函数执行时的 this 值;
- 第二个参数是一个数组(或类数组对象),它的每一项会依次作为函数的实参。
例如:
function sum(a, b, c) { return a + b + c; }sum.apply(null, [1, 2, 3]); // 返回 6
常见使用场景
适用于需要把已有的数组元素当作独立参数传入的函数,比如:
- 求最大值/最小值:
Math.max.apply(null, [2, 5, 1])→5 - 合并数组:
Array.prototype.push.apply(arr1, arr2)(把 arr2 元素推入 arr1) - 构造函数传参:
new Date.apply(null, [2023, 0, 1])(注意:这在严格模式下会报错,需配合Reflect.construct或中间函数)
注意 this 的处理
第一个参数决定函数内部 this 指向:
立即学习“Java免费学习笔记(深入)”;
- 传
null或undefined:非严格模式下指向全局对象(如window),严格模式下为undefined - 传具体对象:函数内
this就是该对象,适合借用方法,如arr.push.apply(arrayLike, [1,2,3])
对比 call 和 spread(…)
和 call 的区别:call 要求参数逐个列出,apply 接收一个数组;
和扩展运算符对比:ES6+ 中更推荐用 func(...arr) 替代 func.apply(this, arr),更简洁且无 this 绑定陷阱。但 apply 在不支持 spread 的环境(如旧版 Node.js 或 IE)中仍是必要手段。


















