1. 程式人生 > >jQuery原始碼解析:變數與函式

jQuery原始碼解析:變數與函式

 //原始碼剖析都基於jQuery-2.0.3版本,主要考慮到相容IE

2行:jQuery javaScript Library v2.0.3——jQuery版本

3行:http://jQuery.com——官網

5~6行:Includes Sizzle.js;http://sizzlejs.Com/複雜選擇器的現實庫

8~10行:版權說明

12行:更新日期

14行:(function(window,undefined){…})(window)——jQuery匿名行數的自執行操作

              引數:window:傳進window後,內部使用的window其實就是使用jQuery物件的window屬性,

                                      有利於提高程式的執行效率。

                                      傳參的第二個作用就是,當檔案被壓縮時,形參只會被保留一個首字母。

                                      如果不傳參,壓縮後的程式就需要到BOM物件上去找window,程式效率就會下降。

                       undefined:由於它本身不是一個保留字也不是一個關鍵字,

                                          所以undefined的值是可以被改變的,為了保證使用的undefined是一個正常的一個undefined。

20行://”use strict” ——嚴格模式控制鎖。jQuery並不推薦使用嚴格模式,很多瀏覽器的一些功能和特性不支援嚴格模式。

 

23行:rootjQuery——同等於$()。           866行:rootjQuery=jQuery(document);實際執行了init方法實現了jQuery物件例項化

 

26行:readyList——跟dom載入有關,具體內容在jQuery繼承和選擇器部分,等到具體內容解釋。

30行:core_strundefined = typeof undefined——實際上typeof undefined獲取到的是一個字串的”undefined”。

           獲取”undefined”的字串,是因為在IE9及IE的老版本中,可能出現例如以下情況:

           a = undefined;在IE的老版本中可能會出現typeof window.a 不等於”undefined”。(xml的情況下)

33行:location = window.location;——儲存當前頁面的URL

34行:document = window.document;——儲存文件物件Document

35行:docElem = document.documentElement;——儲存HTML標籤物件,它的innerHTML屬性就是除了自身以外的HTML內容。

38行:_jQuery = window.jQuery

41行:_$ = window.$           (38,41這兩行主要為了處理$衝突,待後期對命名衝突做詳細的解析

 

44行:class2type = {}——用來儲存物件型別,例如:

           $.type(obj);à的到結果可能會是class2type = {‘[object string]’:’string’,’[object string]’:’array’}

47行:core_deletedIds = []——老版本中跟資料儲存有關(待講到用法在做詳細解釋

49行:core_version = “2.0.3”——當前jQuery的版本號。

52行:core_concat = core_deletedIds.concat; ——儲存陣列的concat()方法。用來做陣列拼接的方法,並返回拼接的陣列。

53行:core_push = core_deletedIds.push; ——儲存陣列的push()方法。用來新增陣列元素的方法,並返回新的陣列長度。

54行:core_slice = core_deletedIds.slice; ——儲存陣列的slice()方法。擷取(獲取)陣列,引數設定範圍(結束引數元素不獲取)。

55行:core_indexOf = core_deletedIds.indexOf; ——儲存陣列indexOf()方法。搜尋元素在陣列中的位置,可以設定起始位置。

56行:core_toString = class2type.toString; ——儲存物件的toString()方法。這個方法被具體的物件重寫了,都有各自不同的作用。

57行:core_hasOwn = class2type.hasOwnPropert; ——儲存物件的hasOwnPropert()方法。用來檢測物件是否含有某個屬性。

58行:core_trim = core_version.trim; ——儲存字串的方法trim();用來去除字串的前後空格。

 

61行:jQuery = function(selector, context){…};——jQuery介面呼叫的方法

//一些正則表示式

67行:core_pnum = /[+ -]?(?:\d*\.|)\d+(?:[eE][+ -]?\d+|)/.source;——用來匹配數字。例如:(+10px,-10px,科學計數法)

          [+-]?匹配零個或一個加號或減號;(?:\d*\.|)非捕獲匹配,匹配零或多次數字或空;\d+匹配一個或多個數字;        

        (?:[eE][+-]?\d+|)匹配科學計數法。

70行:core_rnotwhite = /\S+/g;——匹配全域性任何非空白字元。(用於將兩個單詞分開)

75行:rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/;匹配一個起始標籤或者#[0-9a-z-]*(jq官方說法是防止xss注入的)

           ^(?:\s*(<[\w\W]+>)[^>]*匹配零個或多個空格、<(左尖括號)、除了>(右尖括號)任意長度字元

           |#([\w-]*))$或匹配#(井號)、任意長度的字母數字下劃線中劃線[0-9a-z_-]。

78行:rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/;——用來匹配成對標籤或者單標籤

           ^<(\w+)\s*\/?>匹配個開始標籤或者單標籤:<(尖括號)、至少一個[0-9A-z_]、任意個空白字元、零個或一個/(斜杆)、>(尖括號)

           (?:<\/\1>|)$匹配非捕獲的結束標籤或者空白

 

81行:rmsPrefix = /^-ms-/;——匹配用於駝峰化的虛線字串(待理解:暫時理解為用於將-連線的字串轉換為駝峰格式)

82行:rdashAlpha = /-([\da-z])/gi;——匹配由“-”全域性匹配-(中劃線)連線的數字和字母(用途同上)

85行:fcamelCase = function( all, letter){return letter.toUpperCase();}——駝峰化處理回撥函式(待具體分析該回調函式);

 

90行:completed = function(){       ——DOM載入完成後呼叫的回撥函式(待具體分析)

                            document.removeEventListener(“DOMcontentLoaded”,completed,false);

                            window.removeEveEventListener(“load”,completed,false);

                            jQuery.ready();

          }

96行:jQuery.fn = jQuery.prototype = {……} ——jQuery物件原型

關於jQuery原始碼剖析的上一部分內容(jQuery例項化與物件原型):https://www.cnblogs.com/ZheOnaAndOnly/p/9966299.html

關於jQuery原始碼剖析的下一部分內容(jQuery的屬性與方法):....