jQuery暴露了什么?

时间:2011-09-24 01:14:48

标签: javascript jquery

jQuery通过以下方式公开:

// Expose jQuery to the global object
window.jQuery = window.$ = jQuery;

但是有两个jQuery:

var jQuery = (function() {

// Define a local copy of jQuery
var jQuery = function( selector, context ) {
        // The jQuery object is actually just the init constructor 'enhanced'
        return new jQuery.fn.init( selector, context, rootjQuery );
    },

我知道这是合法的名字 - 它们来自不同的范围。 但是哪一个曝光了? 我认为它是var jQuery = function( selector, context ),但它似乎与window.jQuery = window.$ = jQuery;

的范围不同

1 个答案:

答案 0 :(得分:6)

我假设您正在查看src/core.jssrc/outro.js

core.js的顶部,有这段代码(如您的问题所示):

var jQuery = (function() {

// Define a local copy of jQuery
var jQuery = function( selector, context ) {

它本身可能看起来像是在为jQuery分配一个新功能。但是,如果你看一下底部:

return jQuery;

})();

它正在执行它刚刚创建的函数,并将jQuery设置为结果(函数内部的jQuery)。

然后,在outro.js中,有以下代码:

// Expose jQuery to the global object
window.jQuery = window.$ = jQuery;
})(window);

jQuery此处是jQuery顶部的core.js。因此,通过一系列步骤,将window.jQuery(以及window.$)设置为这样定义的jQuery对象:

// Define a local copy of jQuery
var jQuery = function( selector, context ) {
        // The jQuery object is actually just the init constructor 'enhanced'
        return new jQuery.fn.init( selector, context, rootjQuery );
    },