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的属性与方法):....

猜你喜欢

转载自www.cnblogs.com/ZheOnaAndOnly/p/9982320.html