-
函數聲明和函數表達式的區別
- 優先級
- JavaScript的變量聲明提升機制-即可以先使用,后聲明
- 函數聲明會被提升到作用域的最前面
- 函數表達式不會被提升,運行時賦值,賦值完才能調用(IIFE就不需要賦值了)
- 名稱
- 函數表達式可以沒有名字
- 形式
- 函數表達式簡單理解就是一個函數賦值給一個變量,這個變量就叫函數表達式
- 優先級
舉個例子
var print // 下面的函數聲明被提升了,所以這里 typeof print === function
print() // 2
var print = function (){
console.log(1);
} // 函數表達式賦值,且覆蓋函數聲明
print() // 1
function print(){
console.log(2);
} // 函數聲明
print() // 1
- 所以輸出順序是:
2
1
1
es6 的let不會被提升