为什么jQuery将自己包装在一个函数中?

时间:2008-12-23 01:46:55

标签: javascript jquery

我正在阅读jQuery source,我想知道为什么整个源文件都包含在一个自治函数中。

(function(){
  ...
})();

这有助于不污染全局命名空间吗?它为什么存在?它是如何工作的?

2 个答案:

答案 0 :(得分:21)

它使用函数体提供自己的范围,而不是引入大量可能被外部代码意外更改的全局变量。

例如

(function (){
    var someConstantValue = ...;
    myCoolFunction = function(){ return someConstantValue * 5; }
})();

myCoolFunction();

如果未引入功能范围,则可能会通过引入其他代码(或其他库)意外更改someConstantValue

someConstantValue = someOtherValue; // this won't change the behaviour of myCoolFunction

答案 1 :(得分:6)

你是对的,它可以防止污染全局命名空间。

jQuery需要的所有变量和函数都是在该函数内部创建的,这使得这些函数和变量不会流入全局命名空间。如果你看一下这段代码:

var jQuery = window.jQuery = window.$ = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context );
};

它实际上是通过将window.jQuery和window。$设置为初始化函数来将jQuery初始化程序连接到外部世界。这是包装函数中变量直接在包装器外部可用的唯一地方。

另请注意,整个函数都包含这样(函数,,,)(),它将在文件加载后立即执行该函数。