箭头函数是ES6引入的简洁函数语法,无独立this、arguments、prototype,不可用new调用或作为构造函数;适用于数组回调、保持外层this的闭包等场景,不适用于对象方法或需动态绑定this的函数。

箭头函数是 ES6 引入的一种更简洁的函数定义方式,用 => 符号代替 function 关键字。它不只是写法变短了,核心差异在于行为逻辑——尤其是 this、arguments、prototype 和调用方式这些底层机制。
语法和命名方式不同
普通函数可以具名(如 function foo() {})或匿名(如 const fn = function() {}),而箭头函数天生匿名,只能通过变量赋值来使用:const add = (a, b) => a + b;const log = msg => console.log(msg);
单参数时可省括号,单表达式可省大括号和 return,写起来更轻量。
this 指向完全固定
普通函数的 this 取决于调用方式:对象方法调用指向该对象,独立调用指向全局(非严格模式)或 undefined(严格模式),还能用 call/apply/bind 动态改。
箭头函数没有自己的 this,它直接捕获定义时所在作用域的 this 值,之后永远不变:
- 在对象方法里写箭头函数,this 不会指向该对象,而是外层上下文(比如全局或外层函数);
- 无法用 .call() 等强行修改它的 this。
缺少关键函数特性
箭头函数不支持以下普通函数具备的能力:
- ❌ 不能用 new 调用(无 prototype,报错);
- ❌ 没有 arguments 对象(需用 rest 参数 ...args 替代);
- ❌ 没有 new.target;
- ❌ 不能用 yield,因此不能作为 Generator 函数;
- ❌ 没有 super(在类中无法访问父类方法)。
适用和不适用的典型场景
✅ 适合:
- 数组方法的回调(map、filter、reduce);
- 简单纯计算、无副作用的一次性函数;
- 需要保持外层 this 的闭包场景(比如事件监听器中避免手动 bind)。
❌ 避免:
- 定义对象方法且内部用到 this(容易指向错误);
- 需要构造实例的构造函数;
- 需要动态绑定 this 或访问 arguments 的函数。






