如何访问用' var'声明的文件范围变量使用数组表示法?

时间:2016-05-29 14:04:41

标签: javascript node.js scope

给出以下代码,使用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"],如上所述不起作用)

我花了大约一个小时寻找这个;即hereherehere。显然,通过在文件范围(而不仅仅是var foo = ...)使用foo = ...语法,变量不会出现在global范围内,而是出现在文件的闭包范围内节点创建以包装文件。

现在,我知道我可以从变量声明中删除var。但那不是我要问的。

我想知道是否可以使用数组表示法访问使用var声明的文件范围变量,给定一个表示变量名称的文本字符串。

这可能与Node有关吗?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:0)

节点中有一个全局对象,恰当地命名为sys,但除非省略global关键字,否则它不包含您声明的变量。您可以将其声明为var并使用foo = "hello"访问它。但是,在声明全局变量时要非常小心。如果必须具有全局状态,最好将它全部保存在一个对象中,以便所有全局变量都在一个位置,并且不会使命名空间混乱。例如,

global["foo"]

如果你不这样做,可能会发生奇怪的事情,如var globalVars = { foo: "hello" }; console.log(globalVars["foo"]); 。将全局状态置于一个全局对象中是一种更有条理的方法。