Qyouu
2018-08-16 14:14:19
如下圖,看到好多人寫function的時候,都用var aa=function(){}的形式,這是為什么呢?是性能可以提升一些嗎?求指教~
1 回答

慕尼黑8549860
TA貢獻(xiàn)1818條經(jīng)驗 獲得超11個贊
這兩種是有區(qū)別的,一種是函數(shù)聲明,一種是函數(shù)表達(dá)式。
函數(shù)聲明:
funName()//正常執(zhí)行function funName(){ //code}
函數(shù)表達(dá)式:
funName()//報錯var funName=function(){ //code}
解析器在向執(zhí)行環(huán)境加載數(shù)據(jù)時,對這兩種是有區(qū)別的,解析器會率先讀取函數(shù)聲明,以確保在執(zhí)行任何代碼之前可以訪問,而函數(shù)表達(dá)式,則必須等到解析器執(zhí)行到他所在的代碼才會被真正執(zhí)行。
另外除了這一點區(qū)別,函數(shù)聲明與函數(shù)表達(dá)式的語法其實是等價的。
至于使用哪種就看題主自身的情況來決定,比如:
if(flag){ function sayHi(){ alert("Hi"); } }else{ function sayHi(){ alert("Yo"); } }
上面代碼希望,在flag為true的時候,調(diào)用sayHi時彈出Hi,而false時則彈出Yo,但實際上這在javascript中屬于無效代碼,大多瀏覽器會使用第二個函數(shù)聲明,忽略flag。
可以使用以下寫法:
var sayHiif(flag){ sayHi=function(){ alert("Hi"); } }else{ sayHi=function(){ alert("Yo"); } }
這種寫法就不會有什么意外,根據(jù)flag的不同,sayHi所彈出的內(nèi)容也會出現(xiàn)變化。
添加回答
舉報
0/150
提交
取消