函數表達式和函數聲明
阿新 • • 發佈:2018-06-29
答案 並且 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啊,但是看到旁邊的答案就在想為什麽是這個答案,其實函數聲明和函數表達式有很重要的一點,那就是:
函數聲明有函數提升,會在預編譯環節把聲明和函數體整體提升到執行環境頂部,所以可以在函數聲明之前調用這個函數(其實也就是函數可以在任意地方調用)
而函數表達式的調用,只能在函數表達式之後
這兩句話就解釋了上面輸出結果
函數表達式和函數聲明