【问题标题】:JavaScript - global namespace, window or nothing?JavaScript - 全局命名空间、窗口还是什么都没有?
【发布时间】:2013-09-18 14:16:45
【问题描述】:

我正在使用一些需要全局配置变量的库(例如 Less.js 和 Dojo)。例如:

less = { ... };
dojoConfig = { ... };

这没问题,但我想知道,我应该在窗口上显式声明这个变量吗?

window.less = { ... };
window.dojoConfig = { ... };

每种方法的优缺点是什么?从实际代码中引用此变量的优缺点是什么(不考虑可能与局部变量发生名称冲突):

var somethingNew = dojoConfig.something;

我唯一能想到的是没有窗口的代码更漂亮:)

【问题讨论】:

    标签: javascript window


    【解决方案1】:

    如果您开始在严格模式下运行代码,您会发现通过排除varwindow. 创建隐式全局变量是非法的。

    IMO,明确声明总是一种更好的做法。对于全局变量,如果您在全局变量范围内,则为 window.foovar foo

    就引用现有的全局变量而言,它就像此时的任何其他变量一样,因此您实际上并不需要 window.同名。

    【讨论】:

      【解决方案2】:

      将属性显式附加到窗口比隐式全局变量声明更容易维护。如果需要灵活处理环境,可以使用以下语法:

      //Here, "this" refers to the window when executed inside the browser
      (function() { this.prop = "value" })()
      console.log(window.prop === "value") // true
      

      在该函数中,您可以添加私有逻辑并根据需要公开所需的变量。此外,您可以命名该函数并将这些属性附加到您通过function.prototype.bind绑定到的任何对象上

      顺便说一下,隐式全局变量在严格模式下也不起作用。

      【讨论】:

        猜你喜欢
        • 2012-08-18
        • 1970-01-01
        • 2017-05-15
        • 2013-11-19
        • 2016-08-03
        • 1970-01-01
        • 2012-11-10
        • 2012-02-10
        • 2018-04-25
        相关资源
        最近更新 更多