如下,首先整個**結構看上去就是乙個閉包自執行,閉包執行的好處在於閉包擁有私有的作用域,不會汙染全域性作用域,最終再將jquery作為乙個命名空間匯出到window下,這樣**管理起來非常方便,相容性好。
jquery整個閉包執行,實際是執行了factory()方法,而factory()是作為引數傳進去的,因此詳細分析原始碼,就是分析作為引數傳入閉包的函式。
(function( global, factory )
return factory( w );
};} else
}(typeof window !== "undefined" ? window : this, function( window, noglobal ) ));
閉包自執行有兩種寫法,以上jquery-1.11版本,使用了寫法2
// 寫法1
(function(arguments) )(arguments);
// 寫法2
(function(arguments) (arguments));
對jquery-1.11.1.js原始碼進行分段分析,可得出如下的整體架構(閉區間內陣列**具體行數)。
(function( global, factory );
(89, 172) // 定義jquery.fn = jquery.prototype = {}; 裡面給jq物件新增了一些方法
(174, 237) // 定義了jquery.extend = jquery.fn.extend = function(){}; extend是jq物件的繼承方法
(239, 584) // 呼叫jquery.extend擴充套件了一些方法,以及定義class2type function isarraylike( obj ) {};
(585, 2730) // sizzle
(2737, 3062) // 定義構建jq物件的方法
(3086, 3248) // 定義jquery.callbacks = function( options ){};
(3251, 3391) // 定義deferred
(3395, 3537) // ready方法
(3546, 3611 ) // support ie < 9
(3617, 3954) // 定義data() 資料快取
(3957, 4099) // 定義queue() 佇列管理
(4105, 4155) // 定義jquery.access
(4159, 4267) // support
(4273, 5269) // 事件處理 on() off() add()
(5272, 5995) // dom操作方法
(5998, 6889) // css操作
(6892, 6998) // jquery.tween
()(7657, 8427) // val() attr() prop() addclass()
(8435, 8466) // bind()
(8477, 9994) // 提交資料和ajax() load()
(10009, 10250) // 位置和尺寸的方法
(10268, 10306) //匯出jquery命名空間
}());
對**分段分析,整個jquery架構一目了然。
jQuery原始碼學習
jquery框架學習 1 定義變數和函式 2 給jq物件,新增一些方法和屬性 3 extend jq的繼承方法 4 jq.extend 擴充套件jq的一些工具方法 5 jq複雜的選擇功能 6 callbacks 回函物件,函式的統一管理 7 deferred 延遲物件,對非同步的乙個統一管理 8 s...
jQuery原始碼學習筆記
整個jquery是乙個自呼叫的匿名函式 1 function global,factory 9return factory w 10 11 else 14 typeof window undefined window this,function window,noglobal 自呼叫函式大家都不陌生...
jquery原始碼學習筆記二 jQuery工廠
筆記一裡記錄,jquery的總體結構如下 function global,factory typeof window undefined window this,function window,noglobal 那麼這個生成jquery的工廠是咋樣的?醬紫的 function window,nogl...