apply可直接传arguments因它是类数组对象;this由第一个参数决定,arguments作第二参数;es6后推荐用...args替代;箭头函数无arguments,需用剩余参数。

在 JavaScript 中,apply 方法可以显式绑定 this 并传入一个**类数组对象**作为参数列表,而 arguments 正是典型的类数组对象,因此可直接作为第二个参数传给 apply。
arguments 可以直接传给 apply
arguments 虽不是真正的数组(没有 map、forEach 等方法),但它有数字索引和 length 属性,满足 apply 对参数列表的要求。所以最常用写法就是:
function foo(a, b) {
console.log(this.name, a, b);
}
function bar() {
foo.apply(this, arguments); // ✅ 直接传入 arguments
}
bar.call({name: 'Alice'}, 1, 2); // 输出:Alice 1 2
注意 this 的绑定时机
使用 apply 时,第一个参数决定函数内部 this 的指向,第二个参数才是参数列表。如果想让目标函数继承当前调用上下文的 this 和所有实参,就写 fn.apply(this, arguments);若想固定某个对象为 this,则替换第一个参数:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
fn.apply(obj, arguments)→this指向obj,参数原样转发 -
fn.apply(null, arguments)→this在非严格模式下是全局对象,严格模式下为null
ES6 后更推荐用扩展运算符替代
虽然 apply + arguments 仍可用,但现代写法更简洁安全:
- 用
...arguments替代apply(需确保函数支持扩展运算符) - 用剩余参数
...args替代arguments,获得真正数组,灵活性更高
// 推荐(ES6+)
function bar(...args) {
foo.call(this, ...args); // 更直观,且 args 是真数组
}
arguments 在箭头函数中不可用
箭头函数没有自己的 arguments,它会沿作用域链向上查找。如果在箭头函数里试图用 apply 传 arguments,实际访问的是外层函数的 arguments,容易出错。此时应明确使用命名参数或剩余参数:
function outer() {
const inner = (...args) => {
foo.call(this, ...args); // ✅ 用剩余参数代替 arguments
};
inner(1, 2);
}
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










