【问题标题】:Why does jQuery wrap itself in a function?为什么 jQuery 将自己包装在一个函数中?
【发布时间】:2010-09-28 03:02:02
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    您说得对,它将防止对全局命名空间的污染。

    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,,,)() 它将在文件加载后立即执行该函数。

    【讨论】:

      【解决方案2】:

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

      例如。

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

      如果没有引入函数作用域,可能会通过引入其他代码(或其他库)意外更改someConstantValue

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

      【讨论】:

        猜你喜欢
        • 2012-06-16
        • 2011-04-04
        • 1970-01-01
        • 2017-07-08
        • 2018-06-09
        • 1970-01-01
        • 1970-01-01
        • 2018-08-05
        • 2013-10-07
        相关资源
        最近更新 更多