gpt4 book ai didi

Nodejs 中的 Javascript 全局变量和属性 - 全局属性有时会被删除?

转载 作者:太空宇宙 更新时间:2023-11-03 23:38:22 26 4
gpt4 key购买 nike

为什么下面的代码在 Node (0.10.36) 中运行时会打印“undefined”?

test = 'a global property';
var test = 'a variable';
console.log(global.test);

如果省略变量声明(删除第 2 行),则会按预期记录“全局属性”。

如果通过 global.test = 'a global property' 在全局对象上显式设置全局属性,那么它也会按预期记录。我认为这两种说法是等价的:

test = 'foo';
global.test = 'foo';

似乎在某些情况下,与隐式创建的全局属性同名的变量声明会导致该属性被删除?

(我知道使用全局变量通常是不好的做法,我试图了解 Nodejs 在处理与全局属性和变量声明相关的代码方面与各种浏览器有何不同)。

最佳答案

在 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,它还没有被设置。

关于Nodejs 中的 Javascript 全局变量和属性 - 全局属性有时会被删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28375998/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com