Node.js在什么对象中存储变量?

时间:2014-08-04 15:28:49

标签: javascript node.js

在我的server.js中:

如果我输入:

var yo = 123;
console.log(global.yo); // undefined
console.log(this.yo); // undefined
浏览器中的

这将是window.yo,那么节点中是否有一些存储此变量的对象?

3 个答案:

答案 0 :(得分:3)

无论是在浏览器上还是在服务器上,JavaScript都不会在任何对象上存储本地声明的变量,它们只存在于范围中(并且无法作为任何属性访问)。 / p>

唯一的例外是全局变量,可以作为全局对象(语言术语)的属性进行访问。在浏览器中,该对象公开为window,在Node中公开为global。它也是全局代码中this绑定的值。

如其他答案中所述,使用节点执行的文件不是全局代码,而是存在于模块范围内,因此您通常不会对任何声明的变量观察此行为。它可以在REPL中使用:

$ node
> var yo = 123;
> global.yo
123
^C
$ echo "var yo = 123; console.log(global.yo)" > test.js
$ node test.js
undefined
$ echo "yo = 123; console.log(global.yo)" > test.js
$ node test.js
123

答案 1 :(得分:1)

简答:不。

答案稍长:

Node.js文档says

  

在浏览器中,顶级范围是全局范围。这意味着在浏览器中,如果您在全局范围内var something将定义一个全局变量。在Node中,这是不同的。顶级范围不是全球范围; Node模块中的var something将是该模块的本地。

要记住的一点是,在Node.js中,所有都是一个模块。这包括输入文件(即您以node blah.js运行的文件)。因此,每个变量都是其模块的本地变量,它们在global上无法像在浏览器中window那样访问:

var yo = 123;
console.log(window.yo); //⇒ 123

但在Node:

var yo = 123;
console.log(global.yo); //⇒ undefined
console.log(module.yo); //⇒ undefined
但是,我无法找到任何指出此行为的文档。

答案 2 :(得分:1)

使用' var'在javascript中声明变量时关键字它将在本地范围内定义变量。

特别是对于浏览器,在全局范围内对变量进行解码,将其设置为窗口。

在节点declerin中,带var的变量将始终为local。我们永远不会没有范围。我们总是有模块级别。

所以不,该变量未分配给任何对象。