Javascript nodejs 中的全局变量和属性 - 有时会删除全局属性?
Javascript global variables and properties in nodejs - global properties sometimes deleted?
为什么在节点 (0.10.36) 中 运行 时以下打印 "undefined"?
test = 'a global property';
var test = 'a variable';
console.log(global.test);
如果省略变量声明(删除第 2 行),'a global property' 将按预期记录。
如果全局 属性 通过 global.test = 'a global property'
在全局对象上明确设置,那么它也会按预期记录。我认为这两个语句是等价的:
test = 'foo';
global.test = 'foo';
似乎在某些情况下,与隐式创建的全局 属性 同名的变量声明导致 属性 被删除?
(我知道使用全局变量通常是不好的做法,我试图了解 nodejs 在处理与全局 属性 和变量声明相关的代码方面与各种浏览器有何不同)。
var
不会自动将您排除在全局范围之外。如果您在全局命名空间中的 Node 中工作(例如,在我测试过的 Node REPL 中),var test
仍将在全局范围内工作,除非您在函数中定义它。
//assign global without var
> test = 'global variable'
'global variable'
//this is still global, so it re-writes the variable
> var test = 'still global'
undefined
> test
'still global'
//if we defined test in a local scope and return it, its different
> var returnVar = function(){ var test = 'local test'; return test }
undefined
//and the global test variable is still the same
> test
'still global'
> returnVar()
'local test'
>
在 javascript 中,变量声明适用于整个文件(或最内层的封闭函数定义,如果有的话):
pi = 3.14159265359; // refers to declared variable pi
var pi;
function myFn() {
x = 1.618034; // refers to declared variable x
if (...) {
while (...) {
var x; // declaration only happens once each time myFn is called
}
}
}
x = 2.7182818; // refers to global variable x
因此在您的示例中,第一行设置已声明变量的值 test
,即使在语法上它位于声明之前。但是global.test
引用了全局变量test
,还没有设置
为什么在节点 (0.10.36) 中 运行 时以下打印 "undefined"?
test = 'a global property';
var test = 'a variable';
console.log(global.test);
如果省略变量声明(删除第 2 行),'a global property' 将按预期记录。
如果全局 属性 通过 global.test = 'a global property'
在全局对象上明确设置,那么它也会按预期记录。我认为这两个语句是等价的:
test = 'foo';
global.test = 'foo';
似乎在某些情况下,与隐式创建的全局 属性 同名的变量声明导致 属性 被删除?
(我知道使用全局变量通常是不好的做法,我试图了解 nodejs 在处理与全局 属性 和变量声明相关的代码方面与各种浏览器有何不同)。
var
不会自动将您排除在全局范围之外。如果您在全局命名空间中的 Node 中工作(例如,在我测试过的 Node REPL 中),var test
仍将在全局范围内工作,除非您在函数中定义它。
//assign global without var
> test = 'global variable'
'global variable'
//this is still global, so it re-writes the variable
> var test = 'still global'
undefined
> test
'still global'
//if we defined test in a local scope and return it, its different
> var returnVar = function(){ var test = 'local test'; return test }
undefined
//and the global test variable is still the same
> test
'still global'
> returnVar()
'local test'
>
在 javascript 中,变量声明适用于整个文件(或最内层的封闭函数定义,如果有的话):
pi = 3.14159265359; // refers to declared variable pi
var pi;
function myFn() {
x = 1.618034; // refers to declared variable x
if (...) {
while (...) {
var x; // declaration only happens once each time myFn is called
}
}
}
x = 2.7182818; // refers to global variable x
因此在您的示例中,第一行设置已声明变量的值 test
,即使在语法上它位于声明之前。但是global.test
引用了全局变量test
,还没有设置