jquery源码分析之总体架构

xiaoxiao2021-02-28  63

1. 总体架构

引自http://www.cnblogs.com/nuysoft/archive/2011/11/14/2248023.html

 在工作学习之余,想学习下jquery的源码,终于要触碰这个让我又爱又怕的地方了,心里很忐忑,但是还是找到了很多的资源,学习,总结,下面是我自己的一些理解。

1.1 自调用匿名函数self-invoking anonymous function

1.在jquery源码,首先看到的是

(function( window, undefined ) { // jquery code })(window);

这是一个快级作用域,也叫做私有作用域,在其内的函数变量和方法,不会破坏全局的命名空间。这点非常有用也是一个JS框架必须支持的功能,

jQuery被应用在成千上万的JavaScript程序中,必须确保jQuery创建的变量不能和导入他的程序所使用的变量发生冲突。

2。匿名函数从语法上叫函数直接量,JavaScript语法需要包围匿名函数的括号,事实上自调用匿名函数有两种写法(注意标红了的右括号):

(function() { console.info( this ); console.info( arguments ); }( window ) ); (function() { console.info( this ); console.info( arguments ); })( window ); 3.为什么传入的是window对象呢?

通过传入window变量,使得window变量从全局变量变为局部变量,挡在jquery代码块中访问window对象时,不需要将

作用域链回退到顶层作用域(我的理解是javascript程序是从前到后顺序执行的,那么在单独一个方法中访问window对象时,

它会先从最顶层的作用域向下找),这样可以更快速的访问window;这个还是关键所在,更重要的是,讲window作为参数,

可以在压缩时进行优化:

(function(a,b){})(window); // window 被优化为 a 4.为什么要在参数中增加undefined呢?

在自调用匿名函数的作用域内,确保undefined是真的未定义。因为undefined能够被重写,赋予新的值:

undefined = "now it's defined"; alert( undefined ); 浏览器测试结果: 5.注意源码最后的分号

分号是可选的,但是省略分号不是一个好的编程习惯;为了更好的兼容性和健壮性,请在每行代码后加上分号,养成好习惯。

1.2 总体架构

接下来看看在自调用匿名函数中都实现了什么功能,安装代码顺序排列:

(function( window, undefined ) { // 构造jQuery对象 var jQuery = function( selector, context ) { return new jQuery.fn.init( selector, context, rootjQuery ); } // 工具函数 Utilities // 异步队列 Deferred // 浏览器测试 Support // 数据缓存 Data // 队列 queue // 属性操作 Attribute // 事件处理 Event // 选择器 Sizzle // DOM遍历 // DOM操作 // CSS操作 // 异步请求 Ajax // 动画 FX // 坐标和大小 window.jQuery = window.$ = jQuery; })(window);

从上边的注释看,jQuery的源码结构相当清晰、条理,不像代码那般晦涩和让人纠结。后边的章节基本将以这个顺序展开。

1.3        下节预告

如果你看过jQuery源码,很快就会发现这里到处充斥着正则表达式,而很多JavaScript开发人员又疏于正则基础知识,为了扫清这个障碍,下一章将先温习JavaScript正则表达式的基础知识,再详细剖析jQuery中的正则表达式。

在正式开始分析源码之前,还有没有要准备的基础知识呢?当然有。比如JavaScript API中的类和对象,如果你不熟练的话,至少手头要有一本参考手册。除了正则,其他的知识点会在分析过程中穿插讲解,不计划辟出新的章节。

另外,提供一个本文章jquery源码下载地址: http://pan.baidu.com/s/1dELufmx 密码: 1ofm

转载请注明原文地址: https://www.6miu.com/read-23419.html

最新回复(0)