给出以下代码,使用var
关键字声明文件范围变量:
// File a.js
var foo = "Hello, foo!"; // I know I can remove 'var', but that's not what I'm asking
logVar("foo");
function logVar(name) {
var text = global[name]; // 'global' does not work to access 'foo'!!!
console.log(text);
}
我想知道如何使用数组表示法访问文件范围变量foo
(即,给定变量名称的文本 - 类似global["foo"]
,如上所述不起作用)
我花了大约一个小时寻找这个;即here,here或here。显然,通过在文件范围(而不仅仅是var foo = ...
)使用foo = ...
语法,变量不会出现在global
范围内,而是出现在文件的闭包范围内节点创建以包装文件。
现在,我知道我可以从变量声明中删除var
。但那不是我要问的。
我想知道是否可以使用数组表示法访问使用var
声明的文件范围变量,给定一个表示变量名称的文本字符串。
这可能与Node有关吗?如果是这样,怎么样?
答案 0 :(得分:0)
节点中有一个全局对象,恰当地命名为sys
,但除非省略global
关键字,否则它不包含您声明的变量。您可以将其声明为var
并使用foo = "hello"
访问它。但是,在声明全局变量时要非常小心。如果必须具有全局状态,最好将它全部保存在一个对象中,以便所有全局变量都在一个位置,并且不会使命名空间混乱。例如,
global["foo"]
如果你不这样做,可能会发生奇怪的事情,如var globalVars = {
foo: "hello"
};
console.log(globalVars["foo"]);
。将全局状态置于一个全局对象中是一种更有条理的方法。