箭头函数没有自己的arguments对象,因其不创建执行上下文,且arguments不会被词法绑定,直接访问会报错;应在外层函数中捕获arguments或使用rest参数传入。

箭头函数自身没有 arguments 对象,也不能通过 arguments 访问实参。它会沿作用域链向上查找,但 arguments 不是普通变量,**不会被词法绑定**,所以箭头函数内部直接写 arguments 会报 ReferenceError(严格模式下)或指向全局(非严格模式下已废弃行为,实际不可靠)。
为什么箭头函数没有自己的 arguments
因为箭头函数不创建自己的执行上下文,也就没有自己的 arguments 绑定。它继承外层函数的 this、super、new.target 和 arguments 的**词法环境引用**——但注意:这个“继承”仅限于 this/super/new.target,不包括 arguments。ECMAScript 明确规定:箭头函数的 arguments 是一个未声明的标识符,访问即报错。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
正确做法:在外层普通函数中捕获 arguments 并传入
最可靠、推荐的方式是在外层普通函数(function 声明或表达式)中把 arguments 转为数组(或保留类数组对象),再作为参数显式传给箭头函数:
function outer() {
// 捕获当前 arguments(类数组)
const args = Array.from(arguments); // 或 [...arguments]
// 传给箭头函数
const inner = () => {
console.log(args); // ✅ 安全访问
};
inner();
}
outer('a', 'b', 'c'); // ['a', 'b', 'c']
替代方案:用 rest 参数替代 arguments(更现代)
如果控制外层函数定义,优先用 rest 参数(...args),它天然可被箭头函数闭包捕获,语义清晰且兼容性好:
function outer(...args) {
const inner = () => {
console.log(args); // ✅ args 是普通数组,完全可用
};
inner();
}
outer(1, 2, 3); // [1, 2, 3]
不推荐的 hack 方式(仅作了解)
- 在非严格模式下,某些旧引擎可能让箭头函数内
arguments指向全局(如浏览器中是window.arguments),但该行为已被废弃,不可靠且禁用。 - 试图用
eval('arguments')动态访问 —— 严格模式下禁止,且违背安全与可维护原则。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










