jQuery 源码分析学习 — 优秀前端框架jQuery框架认识
从今天开始学习优秀前端开源框架jQuery源码.本系列主要针对 jQuery1.6 源码分析学习.
准备工作:初始jQuery 框架.
(function(){ // javascript 代码…… })();
所有的jQuery 代码都包含在这个自调用匿名函数中
什么是匿名函数?
类似这样的函数定义
(function(a,b) { console.info( a+b); })( 5,6);
匿名函数其实是一种函数字面量,就像对象字面量一样{name:”小小”,age:1} 第一对圆括号括起来的function(){….} 是匿名函数的函数体,第二对圆括号 (5,6) 是匿名函数的参数,此函数字面量定以后就可以自动调用执行,chrome 下 console
什么是自调用函数?
就是初始化后马上执行调用的函数,像上面的函数直接量就是一种自调用函数.
jQuery 之所以采用这种架构是使用了javascript语言的一个技巧,我们知道javascript没有命名空间的感念,而匿名函数中定义的属性,方法,对象等不与匿名函数外的变量,属性,方法等冲突,这样就达到了一个函数使用范围的限制.
jQuery 架构中的只调用函数是 (function(a,b){})(window);
上面的自调用函数中传入的参数是windows,而匿名函数明显需要两个参数 a和b ,window 会默认被a形参接收,那b没有可接收的参数默认会是undefined 我们下面来验证一下.
事实确实是这样,输出的 a 正是window 对象, 而输出的b 是 undefined 因为第二对圆括号传入了一个参数,jQuery 为什么要把window 传入匿名函数呢? 关键因素是在匿名函数直接操作使用window对象而不需要将对象作用域链返回到最顶层作用域链上,其次形参a 接收第一个参数window 将在以后压缩jQuery代码时起到优化作用.
jQuery整体构造如下:
(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对象的定义.函数的实现体在方法 new jQuery.fn.init 中完成,后面我们会分析学习.最下面看到了将 jQuery 对象赋值给windwo的一个属性,同时还定义了另外一个window 属性 $ (美元符号) 它等价于 jQuery ,当多个框架共存的时候,$ 符号可能被占用,就需要用jQuery来代替 $符号了,定义后 jQuery 或者 $ 你就可以直接使用,就像使用window.decument 方法没有两样.