jQuery源码分析-01总体架构分析

 更新时间:2011年11月14日 20:04:16   作者:  
从上边的注释看,jQuery的源码结构相当清晰、条理,不像代码那般晦涩和让人纠结
1. 总体架构

1.1 自调用匿名函数 self-invoking anonymous function
打开jQuery源码,首先你会看到这样的代码结构:
复制代码 代码如下:

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

1. 这是一个自调用匿名函数。什么东东呢?在第一个括号内,创建一个匿名函数;第二个括号,立即执行
2. 为什么要创建这样一个“自调用匿名函数”呢?
通过定义一个匿名函数,创建了一个“私有”的命名空间,该命名空间的变量和方法,不会破坏全局的命名空间。这点非常有用也是一个JS框架必须支持的功能,jQuery被应用在成千上万的JavaScript程序中,必须确保jQuery创建的变量不能和导入他的程序所使用的变量发生冲突。
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作为参数传入,可以在压缩代码时进行优化,看看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中的类和对象,如果你不熟练的话,至少手头要有一本参考手册。
除了正则,其他的知识点会在分析过程中穿插讲解,不计划辟出新的章节。

相关文章

  • jQuery简单获取DIV和A标签元素位置的方法

    jQuery简单获取DIV和A标签元素位置的方法

    这篇文章主要介绍了jQuery简单获取DIV和A标签元素位置的方法,结合实例形式分析了jQuery针对页面div及A标签元素相关操作技巧,需要的朋友可以参考下
    2017-02-02
  • 基于jQuery实现Div窗口震动特效代码-代码简单

    基于jQuery实现Div窗口震动特效代码-代码简单

    本文给大家介绍基于jiquery实现div窗口震动特效代码,需要的朋友可以参考下
    2015-08-08
  • jQuery定义插件的方法

    jQuery定义插件的方法

    有些WEB开发者,会引用一个JQuery类库,然后在网页上写一写$("#"),$("."),写了几年就对别人说非常熟悉JQuery。其实你只是了解一点皮毛,并不知道其中的道理,下面通过本篇文章给大家介绍jquery定义插件的相关知识,感兴趣的朋友一起学习吧
    2015-12-12
  • 基于JQuery的类似新浪微博展示信息效果的代码

    基于JQuery的类似新浪微博展示信息效果的代码

    滑动向下时,把最后一个节点copy过去插入在第一节点中,并在显示时隐藏,再通过透明渐变显示出来。附上源码,需要的朋友可以copy
    2012-07-07
  • PHP结合jQuery实现的评论顶、踩功能

    PHP结合jQuery实现的评论顶、踩功能

    本文给大家分享的功能是这样的:你点击一下顶或踩按钮,记录数值到数据库,并且有颜色的背景跟着变,按照百分比的变化。这样就可以通过背景颜色一眼就看清楚那边支持的人比较多。
    2015-07-07
  • 浅谈jquery选择器 :first与:first-child的区别

    浅谈jquery选择器 :first与:first-child的区别

    下面小编就为大家带来一篇浅谈jquery选择器 :first与:first-child的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • 基于JQuery的动态删除Table表格的行和列的代码

    基于JQuery的动态删除Table表格的行和列的代码

    基于JQuery的动态删除Table表格的行和列的代码以前脚本之家也发布过相关的代码,大家可以参考下。
    2011-05-05
  • jQuery 判断是否包含在数组中Array[]的方法

    jQuery 判断是否包含在数组中Array[]的方法

    下面小编就为大家带来一篇jQuery 判断是否包含在数组中Array[]的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • jquery仿京东商品放大浏览页面

    jquery仿京东商品放大浏览页面

    这篇文章主要为大家详细介绍了jquery仿京东商品浏览页面,鼠标放在图片上实现放大效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Jquery+bootstrap实现表格行置顶置底上移下移操作详解

    Jquery+bootstrap实现表格行置顶置底上移下移操作详解

    这篇文章主要为大家详细介绍了Jquery+bootstrap实现表格行置顶置底上移下移操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02

最新评论