3

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

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

这工作正常,但我想知道,我应该在窗口上明确声明这个变量吗?

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

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

var somethingNew = dojoConfig.something;

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

4

2 回答 2

2

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

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

就引用现有的全局变量而言,它就像此时的任何其他变量一样,因此您实际上并不需要window.用于该目的,尽管如果该变量被同名的局部变量所遮蔽,您可以使用它。

于 2013-09-18T14:20:03.717 回答
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

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

于 2013-09-18T14:22:59.537 回答