箭头函数与普通函数最本质区别在于无function关键字、无独立执行上下文、不可构造实例;它以=>连接参数与表达式体,具匿名性、词法绑定、无arguments、无prototype、不支持new调用。

箭头函数与普通函数在语法层面最本质的区别,是箭头函数没有自己的 function 关键字声明,也不具备独立的函数名绑定、参数列表独立语法结构和可选的函数体大括号/return 规则;它依赖于外围词法环境,通过 => 符号将参数与函数体紧凑连接,形成一种表达式优先、匿名性更强、语法更简略的函数构造形式。
函数声明方式不同
普通函数使用 function 关键字 显式声明,可具名或匿名:
-
function foo() {}(函数声明) -
const bar = function() {}(函数表达式)
箭头函数完全省略 function,用 参数 => 函数体 的固定结构定义:
const fn = () => {}-
const add = (a, b) => a + b(单表达式自动返回) -
const obj = () => ({ x: 1 })(返回对象需括号包裹)
参数语法存在隐含约束
箭头函数的参数部分不支持普通函数的全部语法特性:
- 不支持 arguments 对象(无独立执行上下文)
- 不支持 默认参数的重复绑定(如
(a = 1, a) => {}报错,普通函数允许) - 不支持 剩余参数后跟命名参数(
(...rest, last) => {}语法错误,普通函数中合法) - 单个参数时可省略括号:
x => x * 2;但零参或多个参数必须加括号
函数体语法更偏向表达式语义
箭头函数体若为单个表达式,可省略大括号和 return;一旦使用大括号,则必须显式 return 才有返回值:
-
x => x * 2→ 返回计算结果 -
x => { x * 2 }→ 返回undefined(代码块无 return) -
x => { return x * 2 }→ 正确返回
普通函数无论是否用大括号,都需显式 return 才返回值(除空返回外),且函数体始终是语句序列,不是表达式。
无法用作构造函数
箭头函数没有 [[Construct]] 内部方法,因此不能被 new 调用:
-
new (() => {})→ 抛出TypeError -
new function() {}→ 合法,生成实例
这也意味着箭头函数天然缺失 prototype 属性(不可枚举、不可写),而普通函数的 prototype 是其作为构造器的基础设施。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











