箭头函数不创建自己的this、arguments、super或new.target,而是闭包捕获外层词法环境中的变量绑定和this值;其this在定义时确定且不可被call/apply/bind修改,arguments需从外层函数获取或改用剩余参数。

箭头函数本身不创建自己的 this、arguments、super 或 new.target,但它会形成闭包,捕获外层作用域的变量 —— 这个“捕获”不是按值快照,而是按引用绑定到外层词法环境。
箭头函数闭包捕获的是变量的“绑定”,不是值
箭头函数内部访问的自由变量(如 x、count),指向的是定义时所在词法作用域中的**变量绑定**,而非调用时的值。这意味着如果外层变量后续被修改,箭头函数再次执行时读取的就是新值。
- 例如,在循环中用
let声明变量并创建多个箭头函数,每个函数都捕获各自块级作用域中的独立绑定(这是let的块级绑定特性,不是箭头函数特有) - 若用
var声明,则所有箭头函数共享同一个var变量绑定,最终可能都读到循环结束后的值
不绑定 this,但 this 仍属于闭包捕获的一部分
箭头函数没有自己的 this,它沿用外层普通函数(或全局)的 this 值,并且这个 this 值在函数创建时就已确定,不可被 call/apply/bind 改变 —— 实质上,this 是作为词法环境的一部分被闭包捕获的。
- 在对象方法中定义箭头函数,其
this指向外层函数执行时的this(通常是该对象) - 在全局作用域定义箭头函数,
this指向全局对象(非严格模式)或undefined(严格模式)
arguments 不被捕获,但可从外层函数访问
箭头函数没有自己的 arguments 对象。如果需要访问参数,必须依赖外层普通函数的 arguments,或改用剩余参数 ...args。
- 错误写法:
() => console.log(arguments)(报ReferenceError) - 正确做法:在外层函数中将
arguments赋给变量(如const args = arguments),再由箭头函数闭包捕获该变量 - 更推荐:用
function() { ... } → (...args) => { ... }形式,显式传递参数
与普通函数闭包的关键区别
普通函数闭包也捕获外层变量,但箭头函数额外省略了 this 和 arguments 的绑定逻辑,使闭包行为更“透明”——它完全复用外层执行上下文的词法环境。
- 普通函数每次调用都会创建新的执行上下文,含独立的
this和arguments - 箭头函数跳过这一步,直接复用外层上下文的对应字段,因此闭包中看到的
this和外层函数调用时一致 - 这种设计让箭头函数天然适合用作回调,尤其在事件处理、定时器、Promise 链中保持
this稳定
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











