最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
函数声明和箭头函数的定义规范
时间:2026-07-15 20:34:45 编辑:袖梨 来源:一聚教程网
函数声明与箭头函数定义机制完全不同:前者创建具名绑定并完全提升,后者是表达式求值且不提升;前者有独立执行上下文和动态this,后者继承外层词法作用域且this固定;前者天然具名利于调试,后者匿名需依赖变量名。
函数声明和箭头函数不是“换种写法”,而是定义机制完全不同:一个创建具名绑定并参与提升,另一个是表达式求值,依赖变量声明规则。
语法结构与关键字
函数声明必须使用 function 关键字,后跟函数名和括号参数列表:
function greet(name) { return 'Hello, ' + name; }- 函数名是必需的,且构成独立标识符绑定
- 不能省略
function,也不能用const/let包裹
箭头函数完全省略 function,用 => 连接参数与函数体:
const greet = (name) => 'Hello, ' + name;- 单参数可省括号:
id => users.find(u => u.id === id) - 无参或多个参数必须加括号:
() => console.log('hi')或(a, b) => a + b - 返回对象字面量需外层括号:
() => ({ x: 1 })
作用域与提升行为
函数声明会被**完全提升**:函数名和函数体在作用域顶部就可用:
-
foo(); function foo() { console.log(1); }—— 正常执行 - 可在声明前调用,适合模块顶层工具函数
箭头函数本质是赋值表达式,**不提升**:
-
bar(); const bar = () => {};—— 报ReferenceError - 行为等同于
const bar = ...,只受const/let声明规则约束
this 和执行上下文
函数声明拥有自己的执行上下文:
-
this由调用方式决定(如obj.fn()中this指向obj) - 支持
arguments对象、new调用、prototype - 可被
call/apply/bind修改this
箭头函数没有执行上下文,直接继承外层词法作用域:
-
this固定,无法通过调用方式或bind改变 - 没有
arguments,需用剩余参数...args - 不可
new调用,无prototype属性
命名与调试支持
函数声明天然具名,对开发体验友好:
-
func.name返回真实函数名,堆栈、断点、性能分析中清晰可见 - 支持递归调用(如
function factorial(n) { return n )
箭头函数默认匿名:
-
const fn = () => {};→fn.name是空字符串或'anonymous' - 调试器中显示为
anonymous,错误定位难度增加 - 若需命名,只能靠变量名间接体现,无法在堆栈中直接识别
相关文章
- 新福建app商城积分怎么兑换 07-17
- 钉钉AI做邮件润色怎样运用参考资料 07-17
- Vegas如何制作打字机字幕效果 07-17
- 鲨鱼记账记错了怎样删除 07-17
- 《和平精英》湖心岛鱼竿怎么获得-特训岛钓鱼位置指南 07-17
- soulmate聊满8个字需要多长时间 07-17