jQuery总体架构的了然分析

现在精通了吗。

复制代码 代码如下:

您或然感兴趣的篇章:

(function() {

复制代码 代码如下:

//……

  1. (function(window, undefined){
  2. var document = window.document;
  3. var jQuery = …
  4. })(window);

Technorati 标签:
JQuery,Javascript,Web前端

var jQuery = window.jQuery = function(selector, context) {
//……
};

任何脚本是一个匿名函数(暂时叫它mainFn吧),函数被加载的时候便开端执行,mainFn可以吸收八个参数,执行时只传递一个参数window.

对如此的社团不很明白,也没做探索,只略知一二和和所谓的

复制代码 代码如下:

其余的填补材料:
JQuery是个完美的javascript库,目前结合它写javascript,看了下源码。
先从完整、全局的看,jQuery的源码大概都在底下的代码中:

万事脚本是一个匿名函数(暂时叫它mainFn吧),函数被加载的时候便先河履行,mainFn可以收起三个参数,执行时只传递一个参数window.

js闭包的定义相关,前几日查了一部分素材,有了些基本的知晓。
实在是概念了一个大局函数,前一个括号为一个匿名函数,前边为函数的调用。能够这么敞亮:

jQuery脚本总体协会来说,有如下方式:

(function(window, undefined){ var document = window.document; var jQuery
= … … … })(window);

window.$ = jQuery;

其一库的构造是这么的:

var fun=function(window, undefined){
… …
}
fun(window);

})();

  1. 现实表明下那么些写法的情致:
  2. window
    函数执行时会传入window,那几个流传的window是大局对象(寻常为Window)的
  3. 一个属性且window=this,而传出mainFn函数中作为其参数时,它会被贮存在
    4.
    mainFn的调用对象中.在原型链中查找变量的方针是(非嵌套函数):先找找调用
    5.
    对象,再找找全局对象,所以这使得整个mainFn中选用的window时追寻成效更高
  4. undefined
    由于举办时没有传递第四个参数,故变量undefined的值为undefined.早期版
    7.
    本的浏览器中全局对象大概没有undefined属性,所以无法直接动用它.常常幸免
  5. 其一标题的写法是 window.undefined = window.undefined

接下来在结尾让jQuery库中最主要的靶子jQuery成为了window对象的一个性子,并可以简写为“$”。

那边让jQuery库中最珍重的靶子jQuery成为了window对象的一性情质,那样就可以在其余地点像使用
document(document也是window的一个性情)一样接纳jQuery了。只怕使用过jQuery的情人感叹-我从未拔取jQuery对象,一直利用$的。没错,那是jQuery的同名对象:

  1. 实际表明下这么些写法的趣味:
  2. window
    函数执行时会传入window,那一个流传的window是大局对象(寻常为Window)的
  3. 一个属性且window=this,而传出mainFn函数中作为其参数时,它会被储存在
    4.
    mainFn的调用对象中.在原型链中查找变量的国策是(非嵌套函数):先找找调用
    5.
    目的,再寻觅全局对象,所以那使得整个mainFn中选取的window时追寻成效更高
  4. undefined
    由于举办时不曾传递第四个参数,故变量undefined的值为undefined.早期版
    7.
    本的浏览器中全局对象可能没有undefined属性,所以无法一向利用它.平日幸免
  5. 其一题材的写法是 window.undefined = window.undefined

首先个括号里面是个匿名函数,首个括号表示马上执行第三个括号里面的代码。
先是知道,javascript里面是从未有过命名空间的,要保管你的javascript函数、对象与其它的不争辨,那里用了javascript的一个技巧:你的装有javascript函数、对象都在一个匿名函数里面定义,确保了所定义的函数、对象的有用限制,起到了命名空间的作用。既然效能范围在那些匿名函数中,怎么被别人使用啊?上面看它的上面代码:

复制代码 代码如下:

(function( window, undefined ) {
// Define a local copy of jQueryvar jQuery = function( selector,
context
) { // The jQuery object is
actually just the init constructor
‘enhanced’ return new
jQuery.fn.init( selector, context ); },
// Expose jQuery to the global objectwindow.jQuery =
window.$ = jQuery;
})(window);

相关文章