`
nuysoft
  • 浏览: 521094 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
91bd5d30-bd1e-3b00-9210-87db1cca0016
jQuery技术内幕
浏览量:200762
社区版块
存档分类
最新评论

[原创] jQuery源码分析-01总体架构

阅读更多

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

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

60
0
分享到:
评论
25 楼 nuysoft 2012-11-24  
chenyi056 写道
JS中参数不是按值传递的么?那传进去的window参数应该只是window对象的拷贝吧?在函数内部对window对象做修改,会影响到全局的window对象么?

基本类型按值传递,对象传入引用,函数内部的 window 即全局 window。
24 楼 chenyi056 2012-11-20  
JS中参数不是按值传递的么?那传进去的window参数应该只是window对象的拷贝吧?在函数内部对window对象做修改,会影响到全局的window对象么?
23 楼 cdyh123 2012-10-15  
楼主太牛了,膜拜
22 楼 atoooo 2012-09-14  
adsfadf
333
21 楼 superscorpio 2012-09-12  
博主这个很不错,v587
20 楼 stormtoy 2012-08-28  
谢谢LZ分享,这个一问一答的形式真的不错
19 楼 nuysoft 2012-08-18  
atoooo 写道
nuysoft 写道
atoooo 写道
为很么这个博客上有百度推广的广告啊?怎么弄的呢?

iteye 默认广告

为什么有额博客里面没有啊?

在“博客设置”里可以取消,既然借了 iteye 的宝地,就保留它了。
18 楼 atoooo 2012-08-18  
nuysoft 写道
atoooo 写道
为很么这个博客上有百度推广的广告啊?怎么弄的呢?

iteye 默认广告

为什么有额博客里面没有啊?
17 楼 nuysoft 2012-08-18  
atoooo 写道
为很么这个博客上有百度推广的广告啊?怎么弄的呢?

iteye 默认广告
16 楼 atoooo 2012-08-18  
为很么这个博客上有百度推广的广告啊?怎么弄的呢?
15 楼 yuan29346 2012-07-08  
学习下jquery,楼主辛苦了
14 楼 fredshare 2012-05-26  
我在chrome下测试,是undefined
13 楼 snailxr 2012-05-07  
第一次回帖,V5!!!!!!!!!!!!!!!!!
12 楼 tdwyx 2012-04-12  
引用
将window作为参数传入,可以在压缩代码时进行优化


这个还真没想到 
11 楼 selvemen 2012-03-28  
10 楼 王向众 2012-03-02  
9 楼 nuysoft 2011-12-04  
kph2005 写道
楼主,我在FIREFOX3.5中测试过,undefined也是可以修改的.请问您测试的是哪个版本?

6.02
8 楼 kph2005 2011-12-04  
楼主,我在FIREFOX3.5中测试过,undefined也是可以修改的.请问您测试的是哪个版本?
7 楼 visual超超 2011-10-30  
非常感谢lz写这些教程
6 楼 yaozuodaoforfly 2011-10-20  
支持楼主!!!

相关推荐

    jQuery源码分析-插件

    jQuery源码分析-插件

    jQuery源码分析-初步

    jQuery源码分析-初步

    jQuery源码分析-事件(1).

    jQuery源码分析-事件(1).

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

    《jQuery源码分析-总体架构解析》 在深入探究jQuery的源码之前,我们首先要理解其总体架构的设计理念。jQuery以其高效、易用的特性深受开发者喜爱,而这背后离不开其精心设计的架构。本文将围绕jQuery的核心构造...

    jQuery源码分析-魔术方法

    jQuery源码分析-魔术方法

    jQuery源码分析-事件(2).

    jQuery源码分析-事件(2).

    jquery插件jquery-ui-1.8.2.custom.min.js

    《jQuery UI与jQuery插件深度解析——以jquery-ui-1.8.2.custom.min.js为例》 在Web开发领域,jQuery库以其简洁易用的API和强大的功能深受开发者喜爱。而jQuery UI作为jQuery的一个扩展,提供了丰富的用户界面组件...

    jQuery源码分析-03构造jQuery对象

    ### jQuery源码分析—构造jQuery对象 #### 一、源码结构概览 根据所提供的文件内容,本节将深入分析如何构建jQuery对象及其核心构造逻辑。首先,让我们从整体上理解jQuery构造函数的设计思路。 ##### 总体结构 ...

    jquery-ui-1.8.16.custom.min.js/jquery-ui-1.8.16.custom.css

    这个压缩包包含两个关键文件:`jquery-ui-1.8.16.custom.min.js` 和 `jquery-ui-1.8.16.custom.css`,这些都是jQuery UI的特定版本,即1.8.16。这个版本在当时是一个广泛使用的稳定版本,提供了丰富的功能和组件。 ...

    jquery.datepicker-zh-CN.js

    <script src="./public/js/jquery-ui-1.10.3.min.js"> <script src="./public/js/jquery.datepicker-zh-CN.js"></script> <link href="./public/css/jqueryui/jquery-ui-1.10.3.min.css" rel="stylesheet"> $( "#...

    jquery-ui-datepicker中文版

    jquery-ui-日期框扩展成时间框 jquery-ui时间框 基于别人的代码进行修改 jquery-ui-1.8.16.custom.css文件末尾加入以下代码 .ui-timepicker-div .ui-widget-header{ margin-bottom: 8px; } .ui-timepicker-div dl{ ...

    jQuery源码 jQuery源码 jQuery源码

    jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码jQuery源码...

    jquery-migrate-3.0.0.min.js 含源码

    jquery-migrate-3.0.0.min.js 含源码 包含以下文件: jquery-migrate-3.0.0.min.js jquery-migrate-3.0.0.js // 这个是源码哦 截至2017.11.21, jQuery3.x 最新最稳定版本

    jquery-ui-1.10.3.min.js

    jquery-ui-1.10.3.min.js

Global site tag (gtag.js) - Google Analytics