箭头函数没有自己的arguments对象,访问会报ReferenceError;它不创建独立执行上下文,也不绑定arguments、this、super或new.target,仅继承外层值;应使用rest参数(...args)替代,语法简洁、语义明确且返回真数组。

箭头函数没有自己的 arguments 对象,访问会报 ReferenceError。这不是遗漏,而是设计使然——它不创建独立执行上下文,自然也不提供 arguments。要获取传入参数,得用 ES6 的 rest 参数替代。
为什么 arguments 在箭头函数里不可用
普通函数内部自动拥有类数组的 arguments,包含所有实参;箭头函数则完全不绑定 arguments、this、super 或 new.target。它只继承外层作用域的这些值(如果外层是普通函数,才可能有 arguments,但这不是你想要的“当前函数参数”)。
用 rest 参数(...args)代替 arguments
这是标准、清晰、推荐的做法。语法简洁,语义明确,且返回真数组,可直接调用 map、filter 等方法。
- 基础写法:
const sum = (...nums) => nums.reduce((a, b) => a + b, 0); - 与固定参数混用:
const logWithPrefix = (prefix, ...msgs) => console.log(prefix, ...msgs); - 等价于传统函数中
Array.from(arguments)的场景,rest 更直观安全
需要兼容旧逻辑?谨慎访问外层 arguments
极少数情况下,若箭头函数定义在普通函数内,且你确实想读取外层函数的 arguments(例如封装工具函数),可以这么做:
立即学习“Java免费学习笔记(深入)”;
function outer(a, b) {<br> return (...rest) => console.log('outer args:', arguments, 'inner args:', rest);<br>}
但注意:这容易造成混淆,且无法反映箭头函数自身的调用参数。除非有明确封装需求,否则不建议依赖这种方式。
其他常见误区提醒
- 别试图用
call/apply向箭头函数传arguments——它们对箭头函数的this和arguments都无效 - 不需要为“获取参数个数”专门处理:
args.length就是 rest 数组长度,比arguments.length更可靠 - 如果函数需被当作构造函数或需动态
arguments分析(如代理、装饰器),就该用普通函数,而非强行迁移到箭头函数


















