箭头函数和普通函数最核心的区别在于this绑定方式不同:普通函数this动态绑定、可被call/apply/bind修改,箭头函数则继承定义时外层this且不可变;前者可作构造函数、有arguments和prototype,后者不能new、无arguments/super/new.target、不支持yield且均为匿名函数。

箭头函数和普通函数最核心的区别在于 this 绑定方式不同,其余差异都由此衍生。选错函数类型,容易在事件回调、定时器、对象方法中遇到 this 指向错误,导致变量访问失败或逻辑异常。
1. this 指向机制完全不同
普通函数的 this 是动态的:谁调用它,this 就指向谁(比如对象方法调用时指向该对象,单独调用时指向全局或 undefined);可通过 call、apply、bind 显式修改。
箭头函数没有自己的 this:它直接继承定义时所在作用域的 this,且永远不变——哪怕被赋值给其他对象、用 call 调用,也改不了。
- 适合场景:定时器、事件监听器、Promise 回调中需要保持外层 this(如 class 实例)
- 不适合场景:作为对象方法(
obj.method = () => {...}),因为 this 不会指向 obj
2. 箭头函数不能当构造函数
普通函数可用 new 创建实例,有 [[Construct]] 内部方法;箭头函数没有该能力,执行 new fn() 会直接报错 fn is not a constructor。
Java Linux版下载入口,提供 Oracle JDK 26.0.2 官方 Linux 安装包、Java 环境配置、JDBC 数据库连接和 Java 服务端开发相关信息。
- 所有类、工厂函数、需要原型链继承的场景,必须用普通函数(或 class)
- 箭头函数天生“无实例”,也不具备
prototype属性
3. 没有 arguments 和其他专属绑定
普通函数自动拥有 arguments 类数组对象,可访问所有实参;箭头函数没有 arguments,也没有 super、new.target。
- 替代方案:统一用剩余参数
...args接收参数 - 不能用作 Generator 函数(不支持
yield) - 无法在子类中通过
super调用父类方法
4. 语法更简洁,但全是匿名函数
箭头函数省略 function 关键字,支持多种简写:
- 无参:
() => console.log('hi') - 单参:
x => x * 2(括号可省) - 多参:
(a, b) => a + b(括号不可省) - 单表达式:
=> 表达式自动隐式返回 - 多语句:
=> { ...; return val; }需显式 return
但它始终是匿名的,无法像普通函数声明那样被提升(hoisting),也不能递归自调用(除非提前赋值给变量)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










