1.11自调用匿名函数self-invoking anonymous function
打开jQuery源码,首先我们可以看到这样的代码结构:
( function(widow,undefined){
//code ....
})(window)
- 这是一个自调用匿名函数。那到底是什么呢?在第一括号内,创建一个匿名函数;第二个括号,表示立即执行。 → what
- 那么为什么要创建一个“自调用匿名函数”呢?
通过定义一个匿名函数,创建一个“私有”的命名空间,该命名空间的变量和方法,不会破坏全局的命名空间。
这一点很重要也非常有用,也是一个js框架必须的要支持的功能。jQuery被应该到海量的javaScript程序当中,必
须保证jQuery创建的变量不能和导入它的程序所使用的变量发生冲突。
3. 匿名函数从语法上叫 “函数直接量”,JavaScript语法需要包围匿名函数的括号,但是事实上自调用匿名函数有2中写法(注意红色括号)
//第一种
(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.12 总体架构
接下来看看在自调用匿名函数中都实现了什么功能,按照代码顺序排列:
(function( window,undefined) {
//构造jQuery对象
varjQuery =function( selector, context ) {
returnnewjQuery.fn.init( selector, context, rootjQuery );
}
//工具函数Utilities
//异步队列Deferred
//浏览器测试Support
//数据缓存Data
//队列queue
//属性操作Attribute
//事件处理Event
//选择器Sizzle
// DOM遍历
// DOM操作
// CSS操作
//异步请求Ajax
//动画FX
//坐标和大小
window.jQuery = window.$ = jQuery;
})(window);
--------------------------
通过jQuery(xxx)的调用实现没有生成对象,它的this是指向window对象的,那么jQuery的那些实例方法是怎么样继承过来的呢?接下来看一下:
varjQuery =window.jQuery=function( selector, context ) {
returnnewjQuery.fn.init( selector, context, rootjQuery );
}
这是jQuery的总入口,jQuery对象不是通过new jQuery来继承prototype中的方法,而是jQuery.fn.init函数生成的对象。
1.2 jQuery ---- 正则表达式
分享到:
相关推荐
jquery-3.3.1.js和jquery-3.3.1.min.js免费下载哈。jquery-3.3.1.js和jquery-3.3.1.min.js免费下载哈。jquery-3.3.1.js和jquery-3.3.1.min.js免费下载哈。jquery-3.3.1.js和jquery-3.3.1.min.js免费下载哈。jquery-...
开发工具 jquery-1.11.3.min开发工具 jquery-1.11.3.min开发工具 jquery-1.11.3.min开发工具 jquery-1.11.3.min开发工具 jquery-1.11.3.min开发工具 jquery-1.11.3.min开发工具 jquery-1.11.3.min开发工具 jquery-...
jquery-3.7.0.min.js(jQuery下载)jquery-3.7.0.min.js(jQuery下载)jquery-3.7.0.min.js(jQuery下载)jquery-3.7.0.min.js(jQuery下载)jquery-3.7.0.min.js(jQuery下载)jquery-3.7.0.min.js(jQuery下载)...
jquery-3.1.1.js 、jquery-3.1.1.min.js 【jquery包 js】
jquery-uijquery-uijquery-uijquery-uijquery-uijquery-uijquery-uijquery-uijquery-uijquery-uijquery-uijquery-uijquery-uijquery-uijquery-uijquery-ui
jquery-3.5.0.js jquery-3.5.0.min.js.zip
jquery-1.11.1.js 、jquery-1.11.1.min.js 【官方jquery包 js】
${ctx}/plugins/jquery-ui-1.11.2/jquery-ui.css" > ${ctx}/plugins/jquery-ui-1.11.2/external/jquery/jquery.js"> ${ctx}/plugins/jquery-ui-1.11.2/jquery-ui.js"> ${ctx}/plugins/jquery-ui-1.11.2/jquery-ui-...
这里包含jquery-ui-1.8.16.custom.min.js/jquery-ui-1.8.16.custom.css,我费了好长时间找到的,此东西可以配合jQuery UI开发指南一书使用。
jquery-ui-1.8.2.custom.min.js,jquery-ui-1.8.4.custom.css
jquery-3.0.0.js 、jquery-3.0.0.min.js 【官方jquery包 js】
jquery-1.9.1.js 、jquery-1.9.1.min.js 【jquery包 js】
JQuery是一个快速简洁的JavaScript框架,jquery-3.3.1.js和jquery-3.3.1.min.js,需要的朋友可以下载。
一共包括1、jquery-3.6.3.js文件。 2、jquery-3.6.3.min.js文件。3、jquery-migrate-3.4.0.js文件(主要用于解决jquery版本升级中的问题,是jquery版本升级所必须引用的文件)。4、jquery-migrate-3.4.0.min.js...
压缩包内包含jquery-1.6.4.js jquery-1.6.4.min.js jquery-1.6.4-vsdoc.js 。 【推荐用法】 1、将jquery-1.6.4-vsdoc.js与jquery-1.6.4.js放在同一目录,然后在vs中添加对jquery-1.6.4.js的引用即可; 2、切记:...
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-ui.css、jquery-ui.js
jQuery-1.12.4.js和jQuery-1.8.3.min.js,适合开发人员在学习jquery时导入使用,使代码更加简洁。
jquery-1.10.2.js 与 jquery-1.10.2.min.js , jquery的js包合集。
jquery-ui-1.8.16jquery-ui-1.8.16jquery-ui-1.8.16jquery-ui-1.8.16jquery-ui-1.8.16jquery-ui-1.8.16jquery-ui-1.8.16jquery-ui-1.8.16jquery-ui-1.8.16jquery-ui-1.8.16jquery-ui-1.8.16jquery-ui-1.8.16jquery-...