定義函數(shù)的方法有兩種:函數(shù)聲明和函數(shù)表達(dá)式
類似這樣的就是函數(shù)表達(dá)式
var x = function () {
alert(1);
};
兩者有什么不同?
函數(shù)表達(dá)式可以忽略標(biāo)識(shí)符,不需要取名字
最重要的差別:
函數(shù)聲明會(huì)提升,在執(zhí)行代碼之前會(huì)先讀取函數(shù)名稱。這就意味著可以把函數(shù)聲明放到調(diào)用它的語句后面。但函數(shù)表達(dá)式不能。
f();
var f=function(){
alert(1);
}
//這樣會(huì)報(bào)錯(cuò)
如下就不會(huì)報(bào)錯(cuò),代碼會(huì)正常運(yùn)行
f();
function f(){
alert(1);
}
解析器在向執(zhí)行環(huán)境中加載數(shù)據(jù)時(shí),對函數(shù)聲明和函數(shù)表達(dá)式并非一視同仁。解析器會(huì)率先讀取函數(shù)聲明,并使其在執(zhí)行任何代碼之前可用。至于函數(shù)表達(dá)式,則必須等到解析器執(zhí)行到它所在的代碼行,才會(huì)真正被解析執(zhí)行。--摘紅寶書