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

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

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

     
  • 相关阅读:
    R语言编程艺术(2)R中的数据结构
    R语言编程艺术(1)快速入门
    R语言实战(十)处理缺失数据的高级方法
    R语言实战(九)主成分和因子分析
    R语言实战(八)广义线性模型
    R语言实战(七)图形进阶
    R语言实战(六)重抽样与自助法
    R语言实战(五)方差分析与功效分析
    R语言实战(四)回归
    R语言实战(三)基本图形与基本统计分析
  • 原文地址:https://www.cnblogs.com/yuqingfamily/p/5781811.html
Copyright © 2020-2023  润新知