首頁 >web前端 >js教程 >講解Javascript中什麼是匿名函數

講解Javascript中什麼是匿名函數

青灯夜游
青灯夜游轉載
2018-10-12 15:56:465346瀏覽

本文要跟大家介紹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 
}();

總結:以上就是這篇文章的全部內容,希望能對大家的學習有所幫助。更多相關教學請造訪JavaScript影片教學

相關推薦:

JavaScript圖文教學

#JavaScript線上手冊

以上是講解Javascript中什麼是匿名函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除