代码之家  ›  专栏  ›  技术社区  ›  flybywire

在javascript中使用全局变量最明智的方法是什么?

  •  1
  • flybywire  · 技术社区  · 16 年前

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

    我该怎么办? document.x="this" ,请 document.y="that" ?

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

    5 回复  |  直到 16 年前
        1
  •  19
  •   Stefano Borini    16 年前

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

    var myns = {};
    

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

    myns.foo = 50;
    

    从这个意义上讲,您附加到全局对象的唯一变量是名称空间对象。其他所有内容都是全局可访问的,但在您的命名空间内。这样可以减少全局对象上的冲突,如果愿意的话,最终可以定义不同的名称空间。

        2
  •  8
  •   Christian C. Salvadó    16 年前

    imho,避免冲突的最佳方法是在临时范围内工作,使用自执行函数表达式,将所有库代码封装,并在 非常 选择方式,尽量少用:

    (function(){
      var myLib = window.myLib = function(){ // expose object
        // Initialize
      };
      // ...
    })();
    
        3
  •  3
  •   Erik    16 年前

    默认情况下,在函数外部声明的任何内容都是全局的。您不需要将它显式地附加到文档中就可以了。从长远来看,你不会避免碰撞,这就是为什么这是一个糟糕的做法。

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

        4
  •  0
  •   Tim Down    16 年前

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

    var myAPI = (function() {
        var examplePrivateVariable = 1;
        var examplePublicVariable = 1;
    
        function doSomethingPublic() { /*...*/ }
        function doSomethingPrivate() { /*...*/ }
    
        return {
            examplePrivateVariable: examplePrivateVariable,
            doSomethingPublic: doSomethingPublic
        };
    })();
    
    myAPI.doSomethingPublic();
    
        5
  •  0
  •   Community Mohan Dere    8 年前

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