箭头函数无独立执行上下文,不绑定this/arguments/prototype/super,继承外层普通函数值;普通函数创建完整上下文,支持构造调用、this动态绑定、arguments访问及原型继承。

本质不同在于:箭头函数没有独立的执行上下文,它不绑定 this、arguments、prototype 和 super,而是直接继承外层非箭头函数作用域的这些值;普通函数则会创建完整的执行上下文,拥有自己的 this、arguments 等,并支持构造调用。
箭头函数没有自己的 this,且无法改变
普通函数的 this 在调用时才确定,取决于调用方式(如方法调用、call/apply、事件回调等),所以容易丢失;箭头函数的 this 在定义时就固定了,始终等于外层第一个普通函数的 this 值。这意味着:
- 不能用
call、apply、bind修改它的 this - 在对象方法中直接写箭头函数,this 不指向该对象,而是外层作用域(常为
window或undefined) - 适合用于定时器、事件监听、数组方法回调等需要“保持外层 this”的场景
箭头函数不能作为构造函数使用
普通函数可以通过 new 创建实例,有 prototype 属性,可被继承;箭头函数没有 prototype,调用 new 会立即报错 is not a constructor。因此:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 类的构造方法、工厂函数、需要实例化的逻辑必须用普通函数
- 箭头函数天然排除了面向对象的实例化路径,设计上就是为函数式操作服务的
箭头函数没有 arguments 对象
普通函数内部可直接访问 arguments 类数组对象,获取所有实参;箭头函数内部访问 arguments 会报错 ReferenceError。替代方案是:
- 用 rest 参数
(...args) => { }显式接收参数 - 若嵌套在普通函数内,可访问外层函数的
arguments(继承行为)
其他不可忽视的差异
这些虽非最核心,但影响实际编码习惯和边界行为:
- 箭头函数一定是匿名的,不能被命名提升(
hoisting) - 不支持
yield,不能用作 Generator 函数 - 没有
new.target,无法检测是否被new调用 - 语法更紧凑:单参数可省括号,单表达式可省
{}和return
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










