(function(window, undefined) {

})(window)

window对象作为参数传进闭包的好处

  • JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员
  • 在函数中定义一个变量时,这个变量只对当前函数可见,javascript会搜索当前函数的作用域,如果没有找到,则继续向上层搜索,而查询是要消耗性能的.
  • 在对jQuery代码进行压缩时,window就能在jQuery内部用任意的简写字母代替

undefined为什么作为参数传进去

  • undefined可以在js中被修改,这样jQuery内容使用的undefined就被修改了

代码的38~41行

var _jQuery = window.jQuery,
_$ = window.$;

在js中如果也定义了$和jQuery, jQuery和$就保存了这两个变量,避免了冲突

代码的61~63行定义了jQuery函数(返回的是一个对象)

jQuery = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context, rootjQuery );
},

代码的96行就定义了jQuery.fn,就能知道它其实就是jQuery的原型

jQuery.fn = jQuery.prototype={}

代码的283行含义把jQuery构造函数的原型的init的构造函数的原型对jQuery构造函数的原型有引用关系

jQuery.fn.init.prototype = jQuery.fn;

上面的有些绕口看代码吧

function jQuery(){
return new jQuery.prototype.init();
}
jQuery.prototype.init=function(){};
jQuery.prototype.css=function(){console.log("2")};
jQuery.prototype.init.prototype=jQuery.prototype;
jQuery().css();

下面是代码的示意图

代码的66~82行是一些正则

    // Used for matching numbers
core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
- [+-]? 表示匹配一个+号或者一个-号也可能一个都没有
- (?:\d*\.|)
(?:) 表示不捕获 \d*表示0个或者多个数字,.表示一个小数点,|表示或者为空
- \d+ 表示1个或者多个数字
- (?:[eE][+-]?\d+|)
[eE]表示e或者E,[+-]?\d表示有且只有一个符号或者一个都没有,多个数字
- core_pnum
- 其实就是保存着一个字符串"[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)",方便和后续的组合成一个正则 // Used for splitting on whitespace
core_rnotwhite = /\S+/g,
- /\S+/g 表示所有的非空白的字符 // A simple way to check for HTML strings
// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
// Strict HTML recognition (#11290: must start with <)
rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
- 匹配的是<p>aaa或者#id // Match a standalone tag
rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
- 匹配独立的标签比如<p></p> // Matches dashed string for camelizing
rmsPrefix = /^-ms-/,
- 匹配ie浏览器的前缀比如chrome的前缀(-webkit-)
rdashAlpha = /-([\da-z])/gi,
- 匹配一个-号加数字或者字母

最新文章

  1. Principles of measurement of sound intensity
  2. 【原】iOS动态性(三) Method Swizzling以及AOP编程:在运行时进行代码注入
  3. could not deduce template argument for &#39;const std::_Tree&lt;_Traits&gt; &amp;&#39; from &#39;const std::string&#39;
  4. ofbiz进击 第二节。 control 理解与创建
  5. hihocoder 1138 Islands Travel dijkstra+heap 难度:2
  6. SQL Server 通配符 Wildcard character
  7. AAC ADTS AAC LATM 格式分析
  8. Android 输入法键盘和activity页面遮挡问题解决
  9. MYSQLl防注入
  10. MySQL5.7 安装过程中出现 attempting to start service 过不去
  11. Dynamics CRM Form表单中通过javascript抓取触发change事件字段的属性名
  12. Testlink1.9.17使用方法(第七章 测试用例集管理)
  13. HDU-1018 BigNumber(斯特林近似)
  14. 安装包安装npm
  15. tmux使用总结
  16. 8、Django的模型层(2)
  17. ubuntu普通账户获取root权限的方法以及su和su -的区别
  18. 本地删除文件,git远程不同步删除
  19. 随笔-未整理-linux下流量查看
  20. JS 判断浏览器类型,获取位置信息,让手机震动

热门文章

  1. 出现UnboundLocalError: local variable &#39;a&#39; referenced before assignment异常的情况与解决方法
  2. STM32F407的Modbus做为主站与从站通讯
  3. MySQL--SQL分类
  4. 基于SSM开发在线考试系统 Java源码
  5. python爬虫--cookie反爬处理
  6. JAVA内存分配-通俗讲解
  7. @Autowired和@Resourse关键字的区别
  8. Java线程——synachronized关键字的作用(一)
  9. Ivory Coast Map
  10. Python map filter reduce enumerate zip 的用法