箭头函数不能直接访问arguments对象,而普通函数可以;箭头函数中访问arguments会报错或沿作用域链查找外层arguments,推荐统一使用剩余参数...args替代。

箭头函数不能直接访问 arguments 对象,而普通函数可以——这是两者在参数处理上的一个关键区别。
普通函数:arguments 是内置类数组对象
普通函数内部自动拥有 arguments,它包含调用时传入的所有实参,不管形参是否声明、个数是否匹配:
-
function sum() { console.log(arguments); }→ 调用sum(1, 2, 3)输出Arguments(3) [1, 2, 3] - 可用于实现不定参数求和、参数转发等逻辑
箭头函数:没有自己的 arguments
箭头函数体内访问 arguments 会报错(严格模式下)或沿作用域链向上查找外层函数的 arguments:
-
const sumArrow = () => console.log(arguments);→ 直接运行会抛出ReferenceError: arguments is not defined - 若箭头函数定义在普通函数内部:
function outer() { const inner = () => console.log(arguments); inner(); }→ 此时输出的是outer的arguments,不是inner的(因为它根本不存在)
替代方案:统一用剩余参数 ...args
现代写法推荐用 剩余参数 替代 arguments,它在普通函数和箭头函数中都可用,且是真数组:
立即学习“Java免费学习笔记(深入)”;
const sum = (...nums) => nums.reduce((a, b) => a + b, 0);function sum(...nums) { return nums.reduce((a, b) => a + b, 0); }- 支持数组方法(
map、filter、展开运算符等),比arguments更直观可靠
调试提示:arguments 异常时先查函数类型
如果发现 arguments 值不对或报错,快速检查当前函数是不是箭头函数:
- 看是否有
=>符号 - 确认是否误将需要访问实参的逻辑写进了箭头函数
- 尤其注意事件回调、定时器、Promise.then 等常见嵌套场景


















