当前位置: 代码迷 >> Web前端 >> jQuery源码分析―一 源码结构
  详细解决方案

jQuery源码分析―一 源码结构

热度:286   发布时间:2012-11-22 00:16:41.0
jQuery源码分析―1 源码结构

声明:该文章转自

http://nuysoft.iteye.com/blog/1177451

1.?源码结构

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

打开jQuery源码,首先你会看到这样的代码结构:

(function( window,?undefined?) {

????// jquery code

})(window);

1.?????这是一个自调用匿名函数。什么东东呢?在第一个括号内,创建一个匿名函数;第二个括号,立即执行

2.?????为什么要创建这样一个“自调用匿名函数”呢?

通过定义一个匿名函数,创建了一个“私有”的命名空间,该命名空间的变量和方法,不会破坏全局的命名空间。这点非常有用也是一个JS框架必须实现的功能,jQuery被应用在成千上万的JavaScript程序中,必须确保jQuery创建的变量不能和导入他的程序所使用的变量发生冲突。(ExtJs中通常会用到命名空间来解决变量的冲突问题)。

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

(function() {

????console.info( this );

????console.info( arguments );

}( window )?);

(function() {

????console.info( this );

????console.info( arguments );

})( window );

4.?????为什么要传入window呢?

通过传入window变量,使得window由全局变量变为局部变量,当在jQuery代码块中访问window时,不需要将作用域链回退到顶层作用域,这样可以更快的访问window;另外就是可以把该匿名函数中定义的对象作为window的属性或方法,这样外部就可以通过window来调用了;这还不是关键所在,更重要的是,将window作为参数传入,可以在压缩代码时进行优化,看看jquery-1.6.1.min.js

(function(a,b){})(window);?// window?被优化为?a???

5.?????为什么要在在参数列表中增加undefined呢?

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

undefined = "now it's defined";

alert( undefined );

浏览器测试结果:

浏览器

测试结果

结论

ie

now it's defined

可以改变

firefox

undefined

不能改变

chrome

now it's defined

可以改变

opera

now it's defined

可以改变

6.?????注意到源码最后的分号了吗?

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

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中的类和对象,如果你不熟练的话,至少手头要有一本参考手册。

除了正则,其他的知识点会在分析过程中穿插讲解,不计划辟出新的章节。

  相关解决方案