0
a = 555
console.log(global.a)

输出“未定义”

有人告诉我 Node 中的全局变量会转到 object global,但我找不到它。我想要做的是编写一个函数,该函数将“显示我(并且只有我)在我的程序中创建的所有全局变量”,以便我可以找到拼写错误。(最近我声明了全局变量starCounter而不是分配给局部参数startCounter

更新:

我刚刚意识到我的实际测试文件还有两行,这些行导致了问题。

a = 555
console.log(global.a)
return; 
var a = Math.pow(4, 3)

但现在这让我更加困惑?!为什么在return语句之后从未达到的局部变量赋值会搞砸全局变量赋值?

4

3 回答 3

1

我刚刚在节点 v0.8.11 中创建了它。看起来它工作正常。http://ideone.com/2cnEFe

a = 555
console.log(global.a)

编辑:回答你的第二个问题,当你做这样的事情时

var a = 555;

该变量将在本地范围内创建。但是当你这样做时

a = 555;

该变量将在全局范围内创建。但是当你这样做的时候。

a = 555;
var a;

该变量仍将仅在本地范围内创建。所以,在下面的代码中,a不会被创建为global变量。这就是为什么你得到一个undefined.

a = 555
console.log(global.a)
return; 
var a = Math.pow(4, 3)

阅读有关声明中失踪的有趣故事var一个失踪者如何VAR毁了我们的发射

于 2013-10-25T11:32:51.380 回答
1
a = 555
console.log(global.a)
return; 
var a = Math.pow(4, 3)

但现在这让我更加困惑?!为什么在 return 语句之后从未达到的局部变量赋值会搞砸全局变量赋值?

因为吊装。赋值永远不会到达并执行,但变量已在当前范围内使用关键字声明。就像函数声明一样,它们在您进入(函数)范围时就可用。您的代码相当于var

var a;
a = 555
console.log(global.a)
return; 
a = Math.pow(4, 3)
于 2013-10-25T11:46:52.070 回答
0

您无需global在代码中查找拼写错误。

最好的方法是启用严格模式

有两种方法可以做到这一点。

--use_strict第一种方法是在启动节点应用程序时使用 v8 选项全局启用它。如果您使用显然使用的第三方模块,我不确定这是一个好主意。

第二种方法是添加

"use strict";

.js在项目中每个文件的顶部。

更新

至于您的第二个问题,请参阅var 上的 MDN 文档

于 2013-10-25T11:31:46.650 回答