【问题标题】:What is the sanest way to use global variables in Javascript?在 Javascript 中使用全局变量的最明智的方法是什么?
【发布时间】:2010-01-05 15:25:03
【问题描述】:

在 Javascript 中使用全局变量的最佳方式是什么?

我应该做document.x="this"document.y="that"吗?

从长远来看,我将如何避免碰撞?

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    我个人为我的应用程序数据定义了一个命名空间

    var myns = {};
    

    并定义该命名空间内的所有内容

    myns.foo = 50;
    

    从这个意义上说,您附加到全局对象的唯一变量是命名空间对象。其他所有内容都可以全局访问,但在您的命名空间内。这减少了全局对象上的冲突,最终您可以根据需要定义不同的命名空间。

    【讨论】:

    • 如果您不想创建对象,这是一个不错的解决方案;当我意识到我的变量与我正在使用的其他人编写的脚本发生冲突时,我第一次这样做。
    【解决方案2】:

    恕我直言,避免冲突的最佳方法是在临时范围内工作,使用自执行函数表达式,将所有库代码封装起来,并以非常选择性的方式公开全局对象方式,尽量少用:

    (function(){
      var myLib = window.myLib = function(){ // expose object
        // Initialize
      };
      // ...
    })();
    

    【讨论】:

    • 这也是一个很好的解决方案。 +1
    • 这是一个优雅的解决方案,并为“用 JavaScript 思考”获得加分。请注意,此代码选择公开 window.myLib;并非总是需要这样做,而且您可能不应该这样做。
    【解决方案3】:

    在函数之外声明的任何东西,默认情况下都是全局的。您无需将其明确附加到文档中即可。从长远来看,你不会避免碰撞,这就是为什么这是一个不好的做法。

    您可以编写面向对象的 JS 并将变量保存在一个名称空间中,或多或少。

    【讨论】:

      【解决方案4】:

      正如其他答案所指出的,将您的代码放在一个函数中会阻止它被全局访问。您还可以使用函数的返回值仅公开您想要的变量:

      var myAPI = (function() {
          var examplePrivateVariable = 1;
          var examplePublicVariable = 1;
      
          function doSomethingPublic() { /*...*/ }
          function doSomethingPrivate() { /*...*/ }
      
          return {
              examplePrivateVariable: examplePrivateVariable,
              doSomethingPublic: doSomethingPublic
          };
      })();
      
      myAPI.doSomethingPublic();
      

      【讨论】:

        【解决方案5】:

        我同意上面的 cmets。我通常 create an object,隐藏数据,并根据需要(很少)公开 getter 和行为。

        【讨论】:

          猜你喜欢
          • 2011-12-01
          • 2017-12-11
          • 2016-09-18
          • 2022-01-01
          • 1970-01-01
          • 2010-10-12
          • 1970-01-01
          • 2014-01-27
          • 2017-04-06
          相关资源
          最近更新 更多