js函數定義語法var fn = function() {} 和 function fn() {}的區別


在維護和編寫代碼的時候,經常會遇到如下兩種定義函數的方式:

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");
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM