(function(widow,undefined){jquery
var jquery = (function(){windows
var jquery = function(selector,.contex){瀏覽器
return new jquery.fin.init(selector,.contex,rootJquery);緩存
}閉包
return jquery;異步
})()函數
// 工具方法 Utilities
// 回調函數列表 Callbacks Object
// 異步隊列 Deferred Object
// 瀏覽器功能測試 Support
// 數據緩存 Data
// 隊列 Queue
// 屬性操做 Attributes
// 事件系統 Events
// 選擇器 Sizzle
// DOM 遍歷 Traversing
// DOM 操做 Manipulation
// 樣式操做 CSS(計算樣式、內聯樣式)
// 異步請求 Ajax
// 動畫 Effects
// 座標 Offset、尺寸 Dimension工具
window.jQuery = window.$ = jQuery;測試
})(windows)動畫
這就是jquery總體的結構;
一、總體採用了閉包結構,防止污染了全局空間,防止其餘的第三方跟本身的命名變量衝突
二、閉包中把window,undefined做爲自變量傳入閉包內部,能夠在js的做用域鏈回到頂層,節省時間
js的每一個函數執行過程都會有個與之對應的執行環境,並且,執行環境都是層層嵌套,每一個函數內部的變量都會綁定到對應的執行環境之上以下圖
所以若是jquery環境中的要想訪問windows對象的變量必須回溯到頂層執行變量再去查找,因此把window做爲內部變量
如var document = window.document;
傳入undefined的做爲局部變量也是爲了減小回溯時間同windows同樣;