1. 程式人生 > >函數表達式和函數聲明

函數表達式和函數聲明

答案 並且 ole () 內部 func 錯誤 class 代碼

函數聲明和函數表達式咋眼一看這個名字以為沒有什麽區別,其實還是有很大區別的(特別是用法)

函數聲明是這個樣子的

 function fn(){
   //代碼塊
}
 fn(); //調用

函數表達式是這個樣子的

//沒有參數
var demo = function fn1(){
     //代碼塊
}
 demo(); //正確的調用
 fn1();  //錯誤的調用

//前後兩個函數的名字可以相同,也可以不相同
//function後面的這個名字可以省略,並且只能在函數內部使用

//帶參
var demo1 = function fn2(a,b){
  //代碼塊
}
demo(fn2(3,5))   //調用

既然知道了函數聲明和函數表達式長什麽樣子了,那麽來看看下面這一段代碼

test1(); //100
demo1(); //demo1 is not a function
function test1(){
  console.log(100);
}
var demo1 = function test2(){
  console.log(50);
}

第一眼覺得這麽簡單啊 肯定輸出100和50啊,但是看到旁邊的答案就在想為什麽是這個答案,其實函數聲明和函數表達式有很重要的一點,那就是:

函數聲明有函數提升,會在預編譯環節把聲明和函數體整體提升到執行環境頂部,所以可以在函數聲明之前調用這個函數(其實也就是函數可以在任意地方調用)

而函數表達式的調用,只能在函數表達式之後

這兩句話就解釋了上面輸出結果

函數表達式和函數聲明