箭头函数没有自己的arguments对象,因其不创建独立执行上下文,而是复用外层普通函数的上下文;ES6明确移除对其的绑定,推荐使用...args等现代替代方案。

箭头函数没有自己的 arguments 对象,是因为它不创建独立的执行上下文,也不绑定运行时特有的隐式变量。
它不建立完整的执行上下文
普通函数每次调用都会新建一个执行上下文,其中包含变量环境、词法环境,以及自动绑定的 arguments 对象。而箭头函数跳过了这一步——它复用外层最近的那个普通函数的上下文。没有上下文,自然就没有属于自己的 arguments。
设计上主动舍弃动态特性
箭头函数的核心定位是简化回调、避免 this 绑定混乱,不是替代传统函数的“轻量版”。为提升可预测性和引擎优化空间,ES6 明确移除了对以下四项的绑定:
-
this(继承外层词法作用域) -
arguments(不创建,也不代理) -
super(沿作用域链查找) -
new.target(不可构造,无 [[Construct]])
访问 arguments 会出错或取错值
在箭头函数里直接写 arguments,结果取决于外层环境:
立即学习“Java免费学习笔记(深入)”;
- 如果外层是普通函数,你拿到的是它的
arguments,容易误用 - 如果外层是模块顶层或严格模式全局作用域,直接报
ReferenceError: arguments is not defined
现代替代方案更可靠
不用 arguments 不是缺陷,而是引导你用更清晰的方式处理参数:
- 用剩余参数
...args:得到真数组,支持map、filter、解构等 - 用命名参数 + 默认值:逻辑明确,便于阅读和维护
- 需要动态判断参数个数?直接查
args.length,比arguments.length更直白


















