箭头函数不绑定arguments,因其不创建独立执行上下文,而是复用外层普通函数的上下文;设计上刻意省略动态特性以提升可预测性与性能,推荐使用剩余参数等更清晰的替代方案。

因为箭头函数不创建自己的执行上下文,所以它根本不绑定 arguments、this、super 和 new.target——这些都由外层最近的普通函数决定。
设计目标决定轻量结构
箭头函数是 ES6 引入的语法糖,核心用途是简化回调写法、避免 this 绑定问题。它刻意省略了传统函数中那些“动态运行时特性”,包括独立的参数收集机制。没有 arguments 不是疏漏,而是设计取舍:减少隐式变量,提升可预测性,也利于引擎优化。
执行上下文不完整
普通函数调用时会新建一个完整的执行上下文,其中包含变量环境、词法环境,以及绑定的 arguments 对象。箭头函数跳过了这一步——它复用外层函数的上下文,因此没有属于自己的 arguments。
- 在无外层普通函数的顶层箭头函数里访问
arguments,直接报ReferenceError: arguments is not defined - 若外层有普通函数(如包裹它的
function wrapper() { ... }),箭头函数内读到的arguments实际是外层的,容易引发混淆和 bug
替代方案更清晰可靠
现代 JavaScript 提供了语义明确、类型友好的替代方式,比依赖隐式 arguments 更安全:
-
剩余参数(
...args):得到真正的数组,可直接用map、reduce、解构等,推荐作为默认选择 -
命名参数 + 默认值:参数固定时,显式声明比查
arguments[0]更易读、更易维护 -
外层捕获后传入:仅在需兼容老环境且无法改调用方时使用,需手动转成数组(如
Array.from(arguments)),但应尽量避免嵌套传递
它不是“被删掉”,而是“本就不该有”
箭头函数不是传统函数的简化版,而是不同定位的工具:适合表达式、闭包、短回调;而复杂参数逻辑、构造行为、动态代理等场景,仍应使用 function 声明。混用或强行模拟 arguments 反而破坏代码意图。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











