javascirpt 匿名自執行函式

2021-06-16 18:20:58 字數 1353 閱讀 2390

定義: (function( window, undefined ) {})

(window);

jquery外掛程式定義:(function( $, undefined ) {})

(jquery); 同理

說明:紅色部份其實是個匿名函式,用小括號括起來其實是使其函式建立後返回乙個函式指標,這時函式指定和後面藍色部份的實參變數連線起來,形成了 函式名(引數) 的樣式,使匿名函式建立完立即執行。

下面為詳細說明:

1.(function(window,undefined))(window)

說明:a、匿名的意思是沒有聲名函式的名字,這樣就使得函式外部無法訪問匿名自執行函式的內部,防止函式之間變數命名的相互干擾,通過定義乙個匿名函式,建立了乙個「私有」的命名空間,該命名空間下,你可以玩命定義你的var變數而不會破壞全域性的命名空間。

b、通過傳入window變數,使得window由全域性變數變為區域性變數,當在jquery**塊中訪問window時,不需要將作用域鏈回退到頂層作用域,這樣可以更快的訪問window;這還不是關鍵所在,更重要的是,將window作為引數傳入,可以在壓縮**時進行優化.

作jquery外掛程式時傳入的不是window是jquery,因為你要操作$

c、引數列表中增加undefined,確保undefined是真的未定義。因為undefined能夠被重寫,賦予新的值。(undefined = "123";)這樣。

d、一種替代的寫法如下:

function myfun() 

myfun();  //執行函式  

寫法就簡潔多了。

e、那麼如何訪問匿名函式裡面的函式呢?通常是在裡面的函式或變數前加上window,這樣該函式或變數就成為全域性的了,在同個頁面,即使是不同我js檔案,也可以訪問到,所以只要某個頁面中加入jquery.js,那麼其它js檔案就可以用jquery(*)來訪問jquery.js中的函式。

像jquery在匿名函式內的最後一句為:

window.jquery = window.$ = jquery;  

此處將匿名函式內定義的jquery變數賦值給了全域性變數window.jquery和window.$(此處的window是匿名函式執行時傳入的引數,指向全域性的window物件),所以我們就可以在自己的**中通過『$』 or 『jquery』開始美妙的jquery之旅了。

f、jquery就是乙個大的立即執行匿名函式。

jquery外掛程式**格式:

;(function($);

})(jquery);    //傳入乙個jquery的引數(其是就是匿名函式的引數$的值為jquery),是因為該方法是對jquery庫的擴充套件,那麼在該方法體內就可以呼叫jquery庫中的函式;若不傳

入,則無法呼叫jquery庫 

關於匿名函式自執行

賦值式 將匿名函式賦給變數 表示式定義法 宣告式 var fn 01 function fn 01 如果想呼叫fn 01函式,寫該函式的名稱,然後寫小括號就可以了 將乙個匿名函式用小括號括起來,後面加乙個小括號,表示匿名函式的自執行 可以防止變數汙染 function 帶引數的匿名函式自執行 fun...

js匿名自執行函式

匿名自執行函式 沒有方法名的函式 閉包 閉包是指有權訪問另乙個函式作用域變數的函式 通過乙個例項來解釋 從網上找到了乙個案例,使用了for迴圈 匿名自執行函式 settimeout。案例1 var value1 0,value2 0,value3 0 for var i 1 i 2 i 1 sett...

自執行函式和匿名函式

所謂匿名函式就是沒有名字的函式,形式如下 function 既然沒有名字,那麼如何呼叫呢 var b function b 可以將匿名函式付給乙個變數,這個變數現在就充當了這個函式的名稱,但是記住,這個不是名稱,我只是這麼叫,如果覺得不妥的話,可以認為b現在就是這個匿名函式的代表,在用的時候用b就等...