//源码剖析都基于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的属性与方法):....