函數聲明、函數表達式、匿名函數、當即執行函數

  1. 函數聲明:function fnName () {…};使用function關鍵字聲明一個函數,再指定一個函數名,叫函數聲明。
  2. 函數表達式 var fnName = function () {…};使用function關鍵字聲明一個函數,但未給函數命名,最後將匿名函數賦予一個變量,叫函數表達式,這是最多見的函數表達式語法形式。
  3. 匿名函數:function () {}; 使用function關鍵字聲明一個函數,但未給函數命名,因此叫匿名函數,匿名函數屬於函數表達式,匿名函數有不少做用,賦予一個變量則建立函數,賦予一個事件則成爲事件處理程序或建立閉包等等。
 1 fnName();
 2 function fnName(){
 3     ...
 4 }
 5 //正常,由於‘提高'了函數聲明,函數調用可在函數聲明以前
 6 
 7 fnName();
 8 var fnName=function(){
 9     ...
10 }
11 //報錯,變量fnName還未保存對函數的引用,函數調用必須在函數表達式以後
 1 var fnName=function(){
 2     alert('Hello World');
 3 }();
 4 //函數表達式後面加括號,當javascript引擎解析到此處時能當即調用函數
 5 function fnName(){
 6     alert('Hello World');
 7 }();
 8 //不會報錯,可是javascript引擎只解析函數聲明,忽略後面的括號,函數聲明不會被調用
 9 function(){
10     console.log('Hello World');   
11 }();
12 //語法錯誤,雖然匿名函數屬於函數表達式,可是未進行賦值操做,
13 //因此javascript引擎將開頭的function關鍵字當作函數聲明,報錯:要求須要一個函數名
  1. ( function(){…} )()和( function (){…} () )
    1.   當即執行函數:減小閉包占用的內存,執行完即銷燬
    2. function被當作函數聲明的開始不能直接加圓括號,而函數表達式後面能夠跟圓括號
 1 (function(a){
 2     console.log(a);   //firebug輸出123,使用()運算符
 3 })(123);
 4 
 5 (function(a){
 6     console.log(a);   //firebug輸出1234,使用()運算符
 7 }(1234));
 8 
 9 !function(a){
10     console.log(a);   //firebug輸出12345,使用!運算符
11 }(12345);
12 
13 +function(a){
14     console.log(a);   //firebug輸出123456,使用+運算符
15 }(123456);
16 
17 -function(a){
18     console.log(a);   //firebug輸出1234567,使用-運算符
19 }(1234567);
20 
21 var fn=function(a){
22     console.log(a);   //firebug輸出12345678,使用=運算符
23 }(12345678)

 

==>參考自http://www.jb51.net/article/50967.htmjavascript

相關文章
相關標籤/搜索