首页 > 代码库 > Web前端学习第二篇

Web前端学习第二篇

今天看到了一篇写的不错的文章,是有关对JQuery、js等一些源代码初识的内容,感觉写的还是不错,所以拿过来分享一下。

文章的地址:http://my249645546.iteye.com/blog/1716629

1.对(function(){})();

几乎所有的开源js代码开篇都是这样(function(……){……})(……);

下面是Jquery的部分源码:

(function( window, undefined ) {      var jQuery = function( selector, context ) {          // The jQuery object is actually just the init constructor ‘enhanced‘          return new jQuery.fn.init( selector, context );      },        // Map over jQuery in case of overwrite      _jQuery = window.jQuery,        // Map over the $ in case of overwrite      _$ = window.$,      ……      indexOf = Array.prototype.indexOf;        // Expose jQuery to the global object      window.jQuery = window.$ = jQuery;  })(window);   

那么这个操作符(function(){})();到底是什么意思呢?

(function(){})中的定义了一个function,紧接着的()表示立即执行这个function。

我们看到Jquery源码第一个()中是定义了一个匿名function( window, undefined ) {};接着末尾有个(window),就表示执行这个匿名function,并传入参数window。

在匿名function( window, undefined ) {}中,定义了一个局部变量jQuery;然后在末尾我们看到Jquery末尾有一句 window.jQuery = window.$ = jQuery; 这句代码就表示,将此前定义的jQuery导出到window对象。这也是为什么我们可以在代码任何地方直接使用$、jQuery对象,因为在这里已经将$、jQuery对象挂载到window下去了,而window.$、window.jQuery与直接使用$、jQuery是没有区别的。

(注意,这个window对象是传入的参数window,而不是浏览器window对象!!一个形参、一个实参。我们可以在定义function的时候,将参数window取名为其他字符。所以我们看到jquery.min.js中这个匿名function变成了(function(E,B){})(window);)

通常(function(){})()用来封装一些私有成员或者公共成员的导出。

 

这个其他的内容我就不从那篇文章上抄了,大家还是看那边文章吧!呵呵....

文章的地址:http://my249645546.iteye.com/blog/1716629