箭头函数是ES6引入的简写语法,无独立this、arguments、super和new.target,不可作为构造函数;其this词法绑定外层作用域,适合回调防丢失,但需动态this、构造调用、arguments或继承时须用普通函数。

箭头函数是 ES6 引入的简写函数语法,核心特点是没有自己的 this、arguments、super 或 new.target,且不能用作构造函数。它和普通函数在行为上有本质差异,不只是写法更短。
this 绑定方式不同
普通函数的 this 在调用时动态绑定,取决于调用方式(如 obj.fn() 中 this 指向 obj);而箭头函数的 this 是词法绑定的——它继承外层作用域的 this 值,且不可被 call、apply、bind 改变。
- 适合用在回调中避免 this 丢失,比如事件处理或定时器里
- 但若需要动态 this(如对象方法、构造器内部),就不能用箭头函数
没有 arguments 对象
箭头函数内部访问不到 arguments,但可以用剩余参数(...args)替代:
function sum() { return Array.from(arguments).reduce((a, b) => a + b); }const sum = (...args) => args.reduce((a, b) => a + b);
不能作为构造函数使用
箭头函数没有 prototype 属性,调用 new 会直接报错:TypeError: xxx is not a constructor。
立即学习“Java免费学习笔记(深入)”;
- 所有需要 new 实例化的场景(如定义类、工厂函数)必须用普通函数
- 想模拟类行为时,得用 class 或 function 声明
没有 new.target 和 super
箭头函数不支持 new.target(判断是否被 new 调用),也无法在子类中通过 super() 调用父类构造器。
- 涉及继承逻辑的方法(如子类构造器、静态方法中的 super)不能写成箭头函数
- 类内部定义的箭头函数方法,this 指向实例,但无法访问 super
不复杂但容易忽略:写箭头函数前,先问自己——这里需不需要独立的 this?会不会被 new 调用?要不要 arguments 或 super?满足任一“要”,就该用普通函数。











