函数表达式
定义函数的方式
- 函数声明
- 函数表达式
函数声明
//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的区别:
- var存在变量提升,let没有;
- var可以重复声明变量,let不可以。
- var不存在块作用域,let存在。