为什么在节点(0.10.36)中运行时会打印“undefined”?Javascript全局变量和nodejs中的属性 - 全局属性有时会被删除?
test = 'a global property';
var test = 'a variable';
console.log(global.test);
如果省略变量声明(删除第2行),则按预期方式记录“全局属性”。
如果全局属性通过global.test = 'a global property'
在全局对象上显式设置,那么它也按预期记录。我认为这两个语句是等价的:
test = 'foo';
global.test = 'foo';
它几乎好像有一些情况下使用相同的名称作为隐式创建的全局属性变量声明导致该财产被删除? (我理解使用globals通常是不好的做法,我想了解nodejs在处理与全局属性和变量声明有关的代码时如何与各种浏览器不同)。
如果你在全局范围内工作,'test'和'var test'是等价的。 – Aweary 2015-02-06 22:36:22
@Aweary:这是nodejs。你永远不会在全球范围内。如果你使用'var',变量只能在这个文件中访问;否则它将从任何文件访问。这是一个重要的区别,因为真正的全球变量被强烈阻止。 – 2015-02-07 00:03:42
这是一个重要的区别,很好的标注。我使用术语global来将它与当前Node环境中的函数的局部范围进行对比,但是您是对的,它并不像您在其他环境中发现的那样是全球性的。 – Aweary 2015-02-07 00:10:07