箭头函数没有自己的arguments对象且不绑定独立this,而是继承外层作用域的this和arguments;它不创建执行上下文,故无法访问arguments,推荐用剩余参数替代;其this在定义时确定且不可被call/apply/bind修改。

箭头函数没有自己的 arguments 对象,也不绑定独立的 this 值——它直接继承外层作用域的 this 和 arguments(实际是根本没自己的 arguments)。这是设计使然,不是 bug。
为什么箭头函数没有 arguments?
箭头函数不创建自己的执行上下文,因此不提供 arguments 类数组对象。试图访问 arguments 会报错(ReferenceError)或取到外层函数的 arguments(如果外层是普通函数),但这种行为不可靠且易出错。
- 不能用
arguments[0]、arguments.length等方式获取参数 - 推荐统一使用「剩余参数」
...args替代:const sum = (...nums) => nums.reduce((a, b) => a + b, 0); - 若需兼容旧写法(如动态参数处理),必须改用普通函数声明
箭头函数的 this 是怎么来的?
箭头函数不绑定 this,它的 this 值在定义时就确定了,等于外层非箭头函数作用域的 this,之后不会改变。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 无法通过
call、apply、bind修改其this - 在对象方法中慎用:如果写成
obj.method = () => { console.log(this); },this指向的是定义时的上下文(通常是全局或模块顶层),而非obj - 适合用于回调且需保持外层 this 的场景,比如事件监听或定时器:
setTimeout(() => console.log(this.name), 100); // this 正确指向外层对象
什么时候该用普通函数?
当需要以下任一能力时,必须避免箭头函数:
立即学习“Java免费学习笔记(深入)”;
- 函数作为构造函数(箭头函数不能用
new调用) - 需要动态
this(如对象方法、原型方法、事件处理器需绑定到触发元素) - 依赖
arguments实现不定参逻辑(尤其未迁移到剩余参数的老代码) - 需要
caller或callee(已废弃但部分场景仍有依赖)
如何快速判断该不该用箭头函数?
问自己两个问题:
- 这个函数是否需要有自己的
this?→ 需要 → 用普通函数 - 是否需要访问当前调用的参数列表(且不用剩余参数)?→ 需要 → 用普通函数
- 只是简单回调、映射、过滤,且希望
this和arguments自动沿用外层?→ 可用箭头函数

















