a = 555
console.log(global.a)
输出“未定义”
我被告知Node中的全局变量转到对象global
,但我找不到它。
我想要做的是编写一个函数,它将“显示我(并且只有我)在我的程序中创建的所有全局变量”,以便我可以找到拼写错误。 (最近我声明了全局变量starCounter
,而不是分配给本地参数startCounter
)
更新
我刚刚意识到我的实际测试文件还有两行,这些行导致了问题。
a = 555
console.log(global.a)
return;
var a = Math.pow(4, 3)
但现在这让我更加困惑?!为什么在返回语句之后永远不会达到局部变量赋值会搞砸全局变量赋值?
答案 0 :(得分: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
的有趣故事。 HOW ONE MISSING VAR
RUINED OUR LAUNCH
答案 1 :(得分:1)
a = 555 console.log(global.a) return; var a = Math.pow(4, 3)
但现在这让我更加困惑?!为什么局部变量 在return语句之后永远不会达到的赋值 搞砸了全局变量赋值?
因为hoisting。从未到达并执行赋值,但变量已使用var
keyword在当前作用域中声明。就像函数声明一样,它们在您输入(函数)范围时可用。您的代码等同于
var a;
a = 555
console.log(global.a)
return;
a = Math.pow(4, 3)
答案 2 :(得分:0)
您不需要global
在代码中找到拼写错误。
这样做的最佳方法是启用strict mode。
有两种方法可以做到。
第一种方法是在启动节点应用时使用--use_strict
v8选项全局启用它。如果您使用的是第三方模块,我不确定这是一个好主意。
第二种方法是添加
"use strict";
位于项目中每个.js
文件的顶部。
关于第二个问题,请参阅MDN docs on var。