箭头函数是ES6引入的简洁函数语法,不绑定this/arguments/super/new.target,而是继承外层词法作用域;不能作为构造函数,无prototype,不支持new调用;无arguments但可用...args替代;不可用作Generator函数;适用于需保持this一致性的回调场景。

箭头函数是 ES6 引入的一种简洁的函数定义方式,用 => 符号表示。它不是普通函数的简单缩写,而是在设计上就与传统函数有本质差异——最核心的区别在于 不绑定自己的 this、arguments、super 和 new.target,而是继承外层作用域的值。
箭头函数没有独立的 this
普通函数的 this 取决于调用方式(如对象方法调用、call/apply、事件回调等),而箭头函数的 this 始终等于定义时所在词法作用域的 this,不会被调用方式改变。
常见场景:在事件监听或定时器中避免 this 丢失:
- 普通函数需手动绑定:
btn.addEventListener('click', function() { this.doSomething(); }.bind(this)); - 箭头函数自动继承:
btn.addEventListener('click', () => this.doSomething());
箭头函数不能作为构造函数
它没有 prototype 属性,也不支持 new 调用。试图用 new 实例化箭头函数会直接报错 TypeError: xxx is not a constructor。
立即学习“Java免费学习笔记(深入)”;
这意味着箭头函数不适合用来定义需要通过 new 创建实例的类或工厂逻辑。
箭头函数没有 arguments 对象
普通函数内部可访问 arguments 类数组对象来获取所有实参;箭头函数没有该对象,但可以使用更现代的剩余参数(...args)替代:
- 普通函数:
function f() { console.log(arguments[0]); } - 箭头函数:
const f = (...args) => console.log(args[0]);
其他细节差异
箭头函数还有几个实用但易忽略的特点:
- 不能使用
yield,因此不能用作 Generator 函数 - 没有
new.target,无法检测是否被new调用 - 简写形式省略花括号和
return时,会隐式返回表达式结果(如x => x * 2) - 单参数时可省略括号(
x => x + 1),但无参或多个参数必须加括号(() => 0或(a, b) => a + b)
不复杂但容易忽略:选箭头函数还是普通函数,关键看是否需要动态 this 或构造能力。需要绑定上下文或当构造器时,用普通函数;追求简洁、保持外层 this 或写回调时,箭头函数更安全自然。











