jQuery源碼學習之總體架構

//自調用匿名函數
(function( window, undefined ) {
    // jquery code
})(window);
1.結構:

在第一個括號內,創建一個匿名函數;第二個括號,立即執行

2.創建自調用匿名函數的原因:

通過定義一個匿名函數,創建了一個“私有”的命名空間,該命名空間的變量和方法,不會破壞全局的命名空間。這點非常有用也是一個JS框架必須支持的功能,jQuery被應用在成千上萬的JavaScript程序中,必須確保jQuery創建的變量不能和導入他的程序所使用的變量發生衝突

匿名函數從語法上叫函數直接量,JavaScript語法需要包圍匿名函數的括號,事實上自調用匿名函數有兩種寫法(注意標紅了的右括號):

(function() {

    console.info( this );

    console.info( arguments );

}( window ) );

(function() {

    console.info( this );

    console.info( arguments );

})( window );

3.爲什麼要傳入window

通過傳入window變量,使得window由全局變量變爲局部變量,當在jQuery代碼塊中訪問window時,不需要將作用域鏈回退到頂層作用域,這樣可以更快的訪問window;這還不是關鍵所在,更重要的是,將window作爲參數傳入,可以在壓縮代碼時進行優化,看看jquery-1.6.1.min.js

(function(a,b){})(window); // window 被優化爲 a
4.爲什麼要在在參數列表中增加undefined呢?

 自調用匿名函數 的作用域內,確保undefined是真的未定義。因爲undefined能夠被重寫,賦予新的值

undefined = "now it's defined";
alert( undefined );

瀏覽器測試結果:

瀏覽器

測試結果

結論

ie

now it's defined

可以改變

firefox

undefined

不能改變

chrome

now it's defined

可以改變

opera

now it's defined

可以改變




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章