apply方法可将数组元素作为多个参数传入函数并指定this值,语法为func.apply(thisarg, [arg1, arg2, ...]),常用于math.max.apply(null, [3,7,2])、借用方法及修正this上下文。

apply 方法能一次性把数组元素当作多个参数传入函数,同时指定函数执行时的 this 值。
基本语法和作用
格式是:func.apply(thisArg, [arg1, arg2, ...])。
第一个参数决定函数内部 this 指向谁;第二个参数必须是数组(或类数组),它的每个元素会依次变成函数的实参。
展开数组并绑定 this 的典型用法
- 调用内置方法,比如用
Math.max找数组最大值:Math.max.apply(null, [3, 7, 2])→ 返回7(Math.max不依赖this,所以第一个参数填null或undefined即可) - 借用其他对象的方法,例如让数组调用数组原型上的方法:
[1,2,3].push.apply([4,5], [6,7])→ 把[6,7]推入[4,5],结果是[4,5,6,7],且this指向目标数组[4,5] - 自定义函数中修正上下文:
注意:如果函数内部用了this,又想让它指向某个对象,就必须用apply显式传入该对象作为第一个参数。例如:function greet() { return 'Hello, ' + this.name; }<br> const obj = { name: 'Alice' };<br> greet.apply(obj); // → "Hello, Alice"
和 call、bind 的区别要点
-
call和apply都立即执行,区别只在传参形式:call后面是逗号分隔的参数列表,apply第二个参数必须是数组 -
bind不执行,而是返回一个新函数,其this和部分参数被预先绑定 - ES6 中可用扩展运算符替代
apply的展开功能,如Math.max(...arr),但无法同时控制this(除非配合箭头函数或显式绑定)
常见陷阱提醒
- 第二个参数不是数组或类数组(如
null、undefined、普通对象)会导致报错或行为异常 - 若函数对
this有强依赖,却传了错误的对象(比如传了null而函数又用了this.xxx),运行时会报Cannot read property 'xxx' of null - 在严格模式下,
thisArg为null或undefined时不会被自动转成全局对象,而是保持原值
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











