Node中的全局变量在哪里.js隐藏

Where is the global variable in Node.js hiding?

本文关键字:js 隐藏 在哪里 全局变量 Node      更新时间:2023-09-26
a = 555
console.log(global.a)

输出"未定义"

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

更新:

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

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

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

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

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

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

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

我刚刚在节点 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如何毁了我们的发布

你不需要global来查找代码中的拼写错误。

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

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

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

第二种方法是添加

"use strict";

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

更新

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