apply方法用于显式绑定this并以数组形式传参,语法为func.apply(thisarg, [argsarray]),其中thisarg指定this指向,argsarray必须是数组或类数组对象。

apply 方法用于显式绑定函数的 this 值,并**以数组(或类数组对象)形式一次性传入参数**。
基本语法
func.apply(thisArg, [argsArray])
-
thisArg:指定函数执行时this指向的对象;传null或undefined在非严格模式下指向全局对象(如window),严格模式下保持为null/undefined。 -
argsArray:必须是数组或类数组对象(如arguments、NodeList、HTMLCollection),元素将按索引顺序作为参数依次传给函数。
传递参数数组的典型用法
当你已有参数列表(比如一个数组),又不想手动展开,apply 就是最直接的选择:
function sum(a, b, c) {
return a + b + c;
}
const nums = [1, 2, 3];
console.log(sum.apply(null, nums)); // 输出:6
这里 nums 数组被“展开”为 sum(1, 2, 3) 的三个独立参数。
常见适用场景
-
借用内置方法:比如用
Math.max.apply(null, arr)求数组最大值(ES5 常用写法,ES6 可用Math.max(...arr)替代)。 -
转发 arguments:在封装函数时保留原始调用参数:
function wrapper() { return original.apply(this, arguments); } - 动态调用带不定参的函数:参数来源是运行时生成的数组,无法提前写出形参。
注意事项
- 第二个参数必须是数组或类数组;传普通对象或字符串会报错或行为异常。
- 若传空数组
[],函数将无参数调用;若传null或undefined,部分浏览器会抛错(规范要求抛TypeError)。 - 相比
call(逐个传参)和bind(返回新函数),apply的核心价值就是“数组即参数列表”这一映射关系。











