在維護和編寫代碼的時候,經常會遇到如下兩種定義函數的方式:
var functionOne = function() { // Some code }; function functionTwo() { // Some code }
這兩種是有區別的,一種是函數聲明,一種是函數表達式。
函數聲明:
funName()//正常執行 function funName(){ //code }
函數表達式:
funName()//報錯 var funName=function(){ //code }
解析器在向執行環境加載數據時,對這兩種是有區別的,解析器會率先讀取函數聲明,以確保在執行任何代碼之前可以訪問,而函數表達式,則必須等到解析器執行到他所在的代碼才會被真正執行。
另外除了這一點區別,函數聲明與函數表達式的語法其實是等價的。
至於使用哪種就看題主自身的情況來決定,比如:
if(flag){ function sayHi(){ alert("Hi"); } }else{ function sayHi(){ alert("Yo"); } }
上面代碼希望,在flag為true的時候,調用sayHi時彈出Hi,而false時則彈出Yo,但實際上這在javascript中屬於無效代碼,大多瀏覽器會使用第二個函數聲明,忽略flag。
可以使用以下寫法:
var sayHi if(flag){ sayHi=function(){ alert("Hi"); } }else{ sayHi=function(){ alert("Yo"); } }