我正在阅读jQuery源代码,我想知道为什么整个源文件都包含在一个自治函数中.
(function(){ ... })();
这有助于不污染全局命名空间吗?它为什么存在,它是如何工作的?
它使用函数体提供自己的范围,而不是引入大量可能被外部代码意外更改的全局变量.
例如.
(function (){ var someConstantValue = ...; myCoolFunction = function(){ return someConstantValue * 5; } })(); myCoolFunction();
如果未引入功能范围,则可能someConstantValue
通过引入其他代码(或其他库)而意外更改
someConstantValue = someOtherValue; // this won't change the behaviour of myCoolFunction
你是对的,它可以防止污染全局命名空间.
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初始化程序连接到外部世界.这是包装函数内部变量直接在包装器外部可用的唯一位置.
另请注意,整个函数都包含这样(函数,,,)(),它将在文件加载后立即执行该函数.