程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 第九章 Javascript之匿名函數,第九章javascript

第九章 Javascript之匿名函數,第九章javascript

編輯:JAVA綜合教程

第九章 Javascript之匿名函數,第九章javascript


   分析:

         1、所謂匿名函數,從字面意思理解,就是沒有名字的函數,js 用()來代替(注意,是英文狀態下的括號)

         2、定義形式:   

function (){
    //to add codes that you want to add
}

    3、匿名函數作用

          (1)與閉包函數相比較,最大作用是不污染全局對象,一旦執行完畢,GC自動回收內存,這是與閉包函數本質的區別。閉包函數的一大特點是:

               變量常駐內存,只有關閉浏覽器時,才釋放。 

function f1(){

    var n=999;

    nAdd=function(){n+=1}

    function f2(){
      alert(n);
    }

    return f2;

  }

  var result=f1();

  result(); // 999

  nAdd();

  result(); // 1000

  在如上這段代碼中,result實際上就是閉包f2函數。它一共運行了兩次,第一次的值是999,第二次的值是1000。這證明了,函數f1中的局部變量n一直保存在內存中,並沒有在f1調用後被自動清除。

     為什麼會這樣呢?原因就在於f1是f2的父函數,而f2被賦給了一個全局變量,這導致f2始終在內存中,而f2的存在依賴於f1,因此f1也始終在內存中,不會在調用結束後,被垃圾回收機制(garbage collection)回收。

      這段代碼中另一個值得注意的地方,就是“nAdd=function(){n+=1}”這一行,首先在nAdd前面沒有使用var關鍵字,因此 nAdd是一個全局變量,而不是局部變量。其次,nAdd的值是一個匿名函數(anonymous function),而這個

匿名函數本身也是一個閉包,所以nAdd相當於是一個setter,可以在函數外部對函數內部的局部變量進行操作。

          (2)與一般函數相比較,不執行預編譯。

function fuc() {
    fuc1(); //foo被提到了作用域的最前面, 於是這裡可以正常調用foo函數
    fuc2(); //這裡會報錯bar是個undefined

    function fuc1() {alert("foo()") }
    var fuc2 = function () { alert("bar")};
}

 Code:

      匿名函數的幾種表現形式:

      模式一:函數字面量 (Function Literal)

      先聲明函數對象,然後執行。

(function(){ 
// insert code here 
})();

  模式二:優先表達式 (Prior Expression)

      由於 JavaScript 按照從內到外的順序執行表達式,因此使用括號來強制執行已聲明的函數。

(function(){ 
// insert code here 
}()); 

    模式三:Void 操作符 (Void Operator) 

    使用 Void 操作符執行一個單獨的操作數。

void function(){ 
// insert code here 
}(); 

  


    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved