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

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

之前 事件處理程序 logs cnblogs 函數調用 引擎 花括號 ava img

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‘); }();

技術分享

先來給大家看一個小例子:

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

輸出:undefined 和 2;

第一個console.log講解:因為function屬於一個函數表達式,花括號裏面的作用域訪問不了外面的作用域,所以是undefined

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