1. 程式人生 > >var js=function(){}和function js(){}的區別

var js=function(){}和function js(){}的區別

在Javascript中,函式及變數的宣告都將被提升到函式的最頂部,也就是說我們可以先使用後宣告, 但函式表示式和變量表達式只是將函式或者變數的宣告提升到函式頂部,函式表示式和變數的初始化將不被提升

var js=function(){} 這種叫做函式表示式 必須先定義後使用

function js(){}這種是函式宣告 可以先使用後定義 它會對函式的宣告進行一個提升

舉個例子

1

2

3

4

fun();//hello,world哥

function fun(){    

console.log("hello,world哥"

);

}

方法先使用後宣告這顯然是沒有問題的、那麼我們接著看函式表示式

1

2

3

4

var fun=function(){

console.log("本事啦,我的弟");

}

fun();//本事啦,我的弟

顯然沒有任何問題,我們把宣告和使用顛倒位置

1

2

3

4

fun();

var fun=function(){

console.log("本事啦,我的弟");//Uncaught TypeError: fun is not a function

}

我們發現報錯了,但如果我們直接使用fun則會報一個”Uncaught ReferenceError: fun is not defined”的錯誤(和不宣告fun報錯是不一樣的),其實fun也是一個變數,只不過他是function(){console.log(“本事啦,我的弟”);}的一個引用,fun的宣告被提升了,但是初始化沒有被提升。

再給大家來一個比較有趣的關於提升的例子

1

2

3

4

5

6

var a=1;

(function(){    

console.log(a); 

var a=2;    

console.log(a);

})();

大家認真的思考一下、列印結果是什麼? 正確答案:undefined 2 大家應該想的是1,2 其實這個結果就是變數提升的原因