今天看到了一篇写的不错的文章,是有关对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
Web前端学习第二篇