IT序号网

总体架构知识解答

luoye 2021年05月25日 编程语言 164 0

打开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.注意到源码最后的分号了吗?

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

接下来看看在自调用匿名函数中都实现了什么功能,按照代码顺序排列:

(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的源码结构相当清晰、条理,不像代码那般晦涩和让人纠结。

后边的章节基本将以这个顺序展开。


发布评论
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

part 1知识解答
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。