箭头函数没有 arguments 是因为它不绑定 arguments,而是沿用外层普通函数的作用域,直接访问会报错或取到外层值;应使用剩余参数(...args)替代,它返回真数组且支持解构与数组方法。

箭头函数中无法访问 arguments,因为它没有自己的 arguments 绑定。
为什么箭头函数没有 arguments
箭头函数不绑定 this、super、arguments 和 new.target,这些值沿用外层普通函数的作用域。所以直接在箭头函数里写 arguments 会报 ReferenceError 或取到外层函数的 arguments(如果存在),极易出错。
替代方案:使用剩余参数(...rest)
ES6 推荐用剩余参数语法代替 arguments,它更语义清晰、类型友好,且原生支持解构和数组方法:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 定义时用
(...args) => { ... }捕获所有实参,args是真数组,可直接调用map、filter等 - 例如:
const sum = (...nums) => nums.reduce((a, b) => a + b, 0); - 若需兼容旧逻辑(如只取前几个参数),可用解构:
const [first, second, ...rest] = args;
不得已时:从外层函数透传 arguments
仅当必须与老代码交互且无法修改调用方时,才考虑在外层普通函数中捕获 arguments,再传给箭头函数:
立即学习“Java免费学习笔记(深入)”;
- 外层用
function声明,内部箭头函数接收预存的Array.from(arguments)或[...arguments] - 例如:
function wrapper() { const args = [...arguments]; return () => console.log(args); } - 注意:这增加了嵌套和内存开销,不是推荐做法
常见误区提醒
以下写法都是错误或不可靠的:
-
() => console.log(arguments)—— 报错或取到意外作用域的arguments -
const f = (...args) => { arguments[0] }——arguments在箭头函数内仍不可访问,应改用args[0] - 试图用
Array.prototype.slice.call(arguments)—— 同样因arguments不存在而失败

















