我使用了一些需要全局配置变量的库(例如Less.js和Dojo)。例如:
less = { ... };
dojoConfig = { ... };
这样可行,但我想知道,我应该在窗口上明确声明这些变量吗?
window.less = { ... };
window.dojoConfig = { ... };
什么是专业人士每种方法的缺点?什么是专业人士和从实际代码中引用此变量的缺点(不考虑可能的名称与局部变量冲突):
var somethingNew = dojoConfig.something;
我唯一能想到的是没有窗口的代码更漂亮:)
答案 0 :(得分:2)
如果您开始在严格模式中运行代码,您会发现通过排除var
或window.
来创建隐式全局变量是非法的。
IMO,将声明显式化是一种更好的做法。对于全局变量,如果您处于全局变量范围内,则为window.foo
或var 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
顺便说一下,隐式全局变量也不会在严格模式下工作。