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

Web前端学习第二篇,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。