小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

JQ 源碼分析 摘抄+轉(zhuǎn)載

 文章收藏者 2014-06-13

1. 總體架構(gòu)

1.1        自調(diào)用匿名函數(shù) self-invoking anonymous function

打開jQuery源碼,首先你會看到這樣的代碼結(jié)構(gòu):

(function( window, undefined ) {

    // jquery code

})(window);

1.     這是一個自調(diào)用匿名函數(shù)。什么東東呢?在第一個括號內(nèi),創(chuàng)建一個匿名函數(shù);第二個括號,立即執(zhí)行

2.     為什么要創(chuàng)建這樣一個“自調(diào)用匿名函數(shù)”呢?

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

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

(function() {

    console.info( this );

    console.info( arguments );

}( window ) );

(function() {

    console.info( this );

    console.info( arguments );

})( window );

4.     為什么要傳入window呢?

通過傳入window變量,使得window由全局變量變?yōu)榫植孔兞?,?dāng)在jQuery代碼塊中訪問window時,不需要將作用域鏈回退到頂層作用域,這樣可以更快的訪問window;這還不是關(guān)鍵所在,更重要的是,將window作為參數(shù)傳入,可以在壓縮代碼時進(jìn)行優(yōu)化,看看jquery-1.6.1.min.js:

(function(a,b){})(window); // window 被優(yōu)化為 a   

5.     為什么要在在參數(shù)列表中增加undefined呢?

在 自調(diào)用匿名函數(shù) 的作用域內(nèi),確保undefined是真的未定義。因為undefined能夠被重寫,賦予新的值。

undefined = "now it's defined";

alert( undefined );

瀏覽器測試結(jié)果:

瀏覽器

測試結(jié)果

結(jié)論

ie

now it's defined

可以改變

firefox

undefined

不能改變

chrome

now it's defined

可以改變

opera

now it's defined

可以改變

6.     注意到源碼最后的分號了嗎?

分號是可選的,但省略分號并不是一個好的編程習(xí)慣;為了更好的兼容性和健壯性,請在每行代碼后加上分號并養(yǎng)成習(xí)慣。

1.2        總體架構(gòu)

接下來看看在 自調(diào)用匿名函數(shù) 中都實現(xiàn)了什么功能,按照代碼順序排列:

(function( window, undefined ) {

    // 構(gòu)造jQuery對象

var jQuery = function( selector, context ) {

        return new jQuery.fn.init( selector, context, rootjQuery );

    }

/工具函數(shù) Utilities

// 異步隊列 Deferred

// 瀏覽器測試 Support

// 數(shù)據(jù)緩存 Data

// 隊列 queue

// 屬性操作 Attribute

// 事件處理 Event

// 選擇器 Sizzle

// DOM遍歷

// DOM操作

// CSS操作

// 異步請求 Ajax

// 動畫 FX

// 坐標(biāo)和大小

    window.jQuery = window.$ = jQuery;

})(window);

從上邊的注釋看,jQuery的源碼結(jié)構(gòu)相當(dāng)清晰、條理,不像代碼那般晦澀和讓人糾結(jié)。

后邊的章節(jié)基本將以這個順序展開。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多