本文要跟大家介紹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中什麼是匿名函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!