JavaScript - 全局命名空间,窗口或什么都没有?

时间:2013-09-18 14:16:46

标签: javascript window

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

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

这样可行,但我想知道,我应该在窗口上明确声明这些变量吗?

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

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

var somethingNew = dojoConfig.something;

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

2 个答案:

答案 0 :(得分:2)

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

IMO,将声明显式化是一种更好的做法。对于全局变量,如果您处于全局变量范围内,则为window.foovar foo

就引用现有的全局而言,它就像那时的任何其他变量一样,所以你并不需要window.用于此目的,但如果变量被本地阴影,你可以使用它具有相同名称的变量。

答案 1 :(得分:1)

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

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

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

绑定到的任何对象

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