【发布时间】:2010-09-28 03:02:02
【问题描述】:
【问题讨论】:
标签: javascript jquery
【问题讨论】:
标签: javascript jquery
您说得对,它将防止对全局命名空间的污染。
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 初始化程序连接到外部世界。这是包装函数内部的变量在包装外部直接可用的唯一地方。
还要注意,整个函数是这样包装的 (function,,,)() 它将在文件加载后立即执行该函数。
【讨论】:
它使用函数体提供自己的作用域,而不是引入大量可能被外部代码意外更改的全局变量。
例如。
(function (){
var someConstantValue = ...;
myCoolFunction = function(){ return someConstantValue * 5; }
})();
myCoolFunction();
如果没有引入函数作用域,可能会通过引入其他代码(或其他库)意外更改someConstantValue
someConstantValue = someOtherValue; // this won't change the behaviour of myCoolFunction
【讨论】: