JavaScript 函數聲明,函數表達式,匿名函數的區別,深入理解立即執行函數(function(){…})()
阿新 • • 發佈:2017-08-26
之前 事件處理程序 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(){…})()