作者:yanyige | 发布时间:2017-03-06 12:33

第一章 总体架构

1.1 设计理念

Write Less, Do more。

  • 兼容主流浏览器
  • 具有独特的链式语法
  • 具有高效灵活的CSS选择器
  • 拥有便捷的插件扩展机智和丰富的插件

1.2 总体架构

jQuery模块分成三部分:入口模块、底层支持模块以及功能模块。


下面看一下jQuery源码的总体架构

(function( window, undefiend ) {
    //构造jQuery对象
    var jQuery = (function() {
        var jQuery = (function( selector, context ) {
            return new jQuery.fn.init( selector, context, rootjQuery );
        });
        return jQuery;
    })();
}(window);

那么问题来了:

为什么要创建一个自调用匿名函数? 为什么要为自调用匿名函数设置一个参数window,并且传入window对象? 为什么要为自调用匿名函数设置参数undefined?

前两个问题我知道,这里回答一下第三个问题 通过把undefined作为函数参数使用,可以缩短查找undefined时候的作用域链,并且可以在压缩代码时进行优化。优化是这样进行的:

function( a, b ) {} (window);
// 参数 window 被压缩成 a, 参数 undefined 被压缩成 b。

更重要的是,这里可以确保undefined的值是undefined,因为undefined有可能被重写为新的值。可以用下面的代码来重写undefined的值。

undefiend = 'now it's defined';
console.log(undefined);