我对node.js很陌生,我想知道:看到创建的任何变量的范围被设置为某种全局范围,有没有办法列出已经启动的变量名称? / p>
答案 0 :(得分:2)
node.js变量通常不是全局变量。默认情况下,在模块顶层声明的任何变量仅在模块范围内,不会与任何其他模块发生冲突或干扰。
只有显式分配给global
对象的变量才能实际全局可用。
global.myVar = "foo";
所有其他包含在较小的范围内 - 模块范围或模块内的功能范围。
所以,如果你有这样的模块:
var x = 3;
module.exports = function() {
return x;
}
然后,变量x
根本不是全局变量。它包含在本模块的范围内。它不会与任何其他同名模块中的变量冲突。
因为模块中的顶级变量实际上是模块函数包装器中的局部变量,并且Javascript没有提供在函数范围内迭代局部变量的任何方法,所以无法迭代模块范围内的所有顶级变量
如果您希望能够在某些上下文中迭代所有变量,那么您可以使用不同的格式并将它们作为属性放在对象上。
var obj = {};
obj.x = 3;
obj.y = 5;
// list all enumerable properties of obj
for (var prop in obj) {
console.log("property: " + prop + " = ", + obj[prop]);
}
仅供参考,您还可以使用类似node-inspector的调试器来查看在任何给定范围内声明的所有变量。您在该范围内设置断点,然后查看该断点处的局部变量。