箭头函数没有自己的arguments对象,因其不绑定arguments、this等;推荐用剩余参数(...args)替代,也可在外部普通函数中访问arguments传入,切勿在箭头函数内模拟arguments。

箭头函数确实没有自己的 arguments 对象,这是因为它不绑定 arguments、this、super 和 new.target —— 这些都由外层非箭头函数决定。若需要获取参数列表,有几种实用且符合现代 JavaScript 习惯的替代方式。
使用剩余参数(...args)
这是最推荐、最清晰的替代方案。用剩余参数语法直接捕获所有传入参数,语义明确,且支持解构和数组方法:
- 写法简洁:
const sum = (...args) => args.reduce((a, b) => a + b, 0); - 可与具名参数共存:
const log = (prefix, ...msgs) => console.log(prefix, msgs); - 能直接调用数组方法:
args.forEach(...)、args.slice(1)等,无需转换
在父级普通函数中访问 arguments
如果必须兼容老代码或需动态处理参数(如代理、装饰器),可在包裹它的普通函数里读取 arguments,再传给内部箭头函数:
- 例如:
function wrapper() { const arrow = () => console.log(arguments[0]); arrow(); } - 注意:此时
arguments是wrapper的,不是箭头函数的,但可满足“获取调用时参数”的实际需求 - 适合封装工具函数,不建议在箭头函数内部尝试模拟
arguments
避免强行模拟 arguments 对象
有人试图用 Array.from(arguments) 或 [...arguments] 在箭头函数内还原,但这会报错,因为 arguments 根本不存在于箭头函数作用域。更不可取的是用 eval('arguments') 或闭包偷取——既不安全也不可靠。
立即学习“Java免费学习笔记(深入)”;
- 错误示例:
const bad = () => console.log(arguments); // ReferenceError - 正确思路是接受箭头函数的设计意图:它本就不该处理动态参数逻辑
- 若逻辑复杂、需访问
arguments,直接改用 function 声明更自然
不复杂但容易忽略:箭头函数的精简是有代价的,参数访问就是其中之一。按需选择——简单转发用 ...args,复杂参数处理回归普通函数,反而更清晰可靠。










