函数表达式

函数表达式
定义函数的方式

  • 函数声明
  • 函数表达式

函数声明

//sayHi();
function sayHi(){
  console.log('Hi');
}
sayHi();

函数声明存在函数声明提升,因此无论函数在函数声明前调用还是后调用都没有任何问题。
函数表达式

var fun = function(){
  console.log('匿名函数');
}
fun();

这样正常执行。

fun();
var fun = function(){
    console.log('匿名函数');
}
Uncaught TypeError: fun is not a function

这样会导致错误,为何?
我的理解:因为函数表达式不是一个函数声明,因此不会函数声明提升。
JavaScript书中这样写到:

以上代码之所以执行间产生错误,原因在于函数位于一个初始化语句中,而不是一个函数声明。
换句话说,在执行到函数所在的语句之前,变量fun中不会保存对函数的引用。

函数表达式与其他表达式一样,在使用前必须先赋值。
理解函数提升的关键就是理解函数声明和函数表达式之间的区别。

补充:
var和let的区别:

  1. var存在变量提升,let没有;
  2. var可以重复声明变量,let不可以。
  3. var不存在块作用域,let存在。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值