JavaScript 函數聲明,函數表達式,匿名函數的區別,深入理解立即執行函數(function(){…})()


function fnName(){xxxx};        // 函數聲明:使用function關鍵字聲明一個函數,在指定一個函數名。

//例如:(正常,因為 提升 了函數聲明,函數調用可以在函數聲明之前)
fnName();
function fnName(){
  alert('Hello World');
}




var fnName = function(){xxxx};  //函數表達式:使用function關鍵字聲明一個函數,但是未給函數命名,最后將匿名函數賦予給一個變量。

//例如1:(報錯,變量fnName還未保存對函數的引用,函數調用必須在函數表達式之后)
fnName();
var fnName = function(){
  alert('Hello World');
}
//例如2:(正常,函數表達式后面加括號,當JavaScript引擎解析到此處時能立即調用函數)
var fnName = function(){
  alert('Hello World');
}();
//例如3:(報錯,JavaScript引擎只解析函數聲明,忽略后面的括號,函數聲明不會被調用)
function fnName(){
  alert('Hello World');
}();




function(){xxxx};               //匿名函數:使用function關鍵字聲明一個函數,但是未給函數命名,所以叫匿名函數,匿名函數屬於函數表達式,
                                //匿名函數有很多作用,賦予一個變量則創建函數,賦予一個事件則成為事件處理程序或者創建閉包等等。
                                
//例如:(語法錯誤,語法錯誤,雖然匿名函數屬於函數表達式,但是未進行賦值操作,所以javascript引擎將開頭的function關鍵字當做函數聲明,報錯:要求需要一個函數名)
function(){
  alert('Hello World');
}();

 先來給大家看兩個小例子:(1)

var foo = 1;
  (function(){
      console.log(foo);   
      var foo = 2;
      console.log(foo);   
})();

輸出:undefined  和   2

(2) 

var foo = 'Hello';
  (function(){
      console.log(foo); 
      var bar = 'world';
      console.log(foo + bar); 
    })();
console.log(foo + bar); 

 

 

如果我的內容對你有幫助,歡迎打賞


免責聲明!

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



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