【问题标题】:JavaScript name scopeJavaScript 名称范围
【发布时间】:2012-05-21 23:39:53
【问题描述】:

这是什么意思,在你自己的名字范围内编写 JavaScript,显然它避免了冲突并符合 W3C 标准,但我不知道它是什么意思或它是如何完成的?

【问题讨论】:

标签: javascript


【解决方案1】:

我认为你的意思是命名空间。这意味着您应该将代码包含在命名空间中,这样您就不会污染全局范围(好吧,您确实只用一个变量污染了它,仅此而已)。您打算创建的每个函数和其他内容都将存在于该命名空间中。

一个简单的命名空间示例,在对象字面量中

var ns = {
    foo : function(){...},
    bar : function(){...}
}

您只声明了一个全局变量ns。其余的存储在其中,可通过ns访问

ns.foo();
ns.bar();

现实生活中的例子可以在 JS 框架中看到。例如,我们有 jQuery 和 Underscore

//jQuery uses "jQuery" and "$" as namespaces and has "each()"
$.each();

//Underscore has "_" as a namespace and also has "each()"
_.each();

虽然它们具有相同的函数名,但它们存在于不同的命名空间中。这样可以避免冲突,并帮助您确定什么属于哪里。

【讨论】:

    【解决方案2】:

    这是一种尽量减少使用全局变量的方法(从而避免可能的冲突)。

    var myNS = {}; // Your namespace (an object) = a global var.
    myNS.title = "Demo"; // Your variables come here as object properties.
    myNS.date = "2012-05-21";
    

    对象属性可以是任何类型:标量类型、数组、对象、函数...

    【讨论】:

      【解决方案3】:

      我猜这意味着在你自己的对象中编写函数,而不是编写全局函数:

      var myScope = (function() {
      
          function privateFunction1() {...}
          function privateFunction2() {...}
          function a() {...}
          function b() {...}
          function c() {...}
      
          return {a: a, b: b, c: c};
      
      })();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-05
        • 1970-01-01
        • 1970-01-01
        • 2018-01-08
        • 2013-08-19
        相关资源
        最近更新 更多