当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《为什么jQuery将自己包装在一个函数中?》经验,为你挑选了2个好方法。

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

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

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



1> olliej..:

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

例如.

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

myCoolFunction();

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

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



2> Matt Ephraim..:

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

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初始化程序连接到外部世界.这是包装函数内部变量直接在包装器外部可用的唯一位置.

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

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有