箭头函数不绑定this、arguments、super或new.target,而是继承外层词法作用域的值;无独立执行上下文,不能用作构造函数,也不支持call/apply/bind修改this。

箭头函数在 JavaScript 中不绑定自己的 this、arguments、super 或 new.target,而是沿用外层作用域的绑定。理解变量绑定的关键,是抓住“词法作用域”和“无独立执行上下文”这两个核心。
箭头函数没有自己的 this
普通函数调用时,this 值取决于调用方式(如对象方法、call、构造调用等);而箭头函数的 this 在定义时就确定了,等于外层非箭头函数的 this 值。
- 在对象方法中直接写箭头函数,
this指向外层作用域(通常是全局或模块顶层),不是该对象 - 在事件监听器或定时器中使用箭头函数,可避免
this指向丢失问题,因为它的this继承自定义时所在函数 - 不能用
call、apply或bind改变箭头函数的this
arguments 不可用,但可访问外层 arguments
箭头函数内部没有 arguments 对象。如果需要类数组参数,应使用剩余参数(...args);若需引用外层函数的 arguments,可直接读取(因它属于词法环境)。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 错误写法:
() => console.log(arguments)→ 报错 ReferenceError - 正确替代:
(...args) => console.log(args) - 合法访问:
function outer(){ const fn = () => console.log(arguments); fn(); }→ 输出 outer 的 arguments
不能作为构造函数,也没有 new.target
箭头函数没有 [[Construct]] 内部方法,因此不能用 new 调用。同时,它也不绑定 new.target,访问会返回外层函数的 new.target(若外层也不是构造函数,则为 undefined)。
立即学习“Java免费学习笔记(深入)”;
-
const Foo = () => {};→new Foo()抛出 TypeError - 在 class 构造函数中定义箭头函数方法,其
new.target仍指向该 class 的构造调用
super 和 new.target 同样由外层决定
在 class 方法中,若用箭头函数定义实例方法,它无法直接访问 super(因为没有自己的原型链绑定)。但若箭头函数定义在 class 的普通方法内,它可访问该方法中的 super 属性或方法(通过外层方法的词法环境)。
-
class A { m() { const f = () => super.x; } }→f()可正常访问super.x -
class B { m = () => super.x; }→ 语法错误(类字段初始化器中不能用 super) - 箭头函数中
new.target总是外层函数的值,不会反映自身是否被 new 调用

















