Node.js存储variables的对象是什么?

在我的server.js中:

如果我input:

var yo = 123; console.log(global.yo); // undefined console.log(this.yo); // undefined 

在浏览器中这将是window.yo,所以有这个variables存储在节点的一些对象?

无论在浏览器上还是在服务器上,JavaScript都不会将局部声明的variables存储在任何对象上,而只是存在于作用域中 (不能作为任何属性访问)。

唯一的例外是全局variables,它们可以作为全局对象 (语言术语)的属性访问。 在浏览器中,该对象被暴露为window ,在Node中它被暴露为global 。 这也是全局代码中this绑定的价值。

正如在其他答案中所述,使用节点执行的文件不是全局代码,而是位于模块范围内,因此通常不会对任何已声明的variables进行观察。 它在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 

简短的回答:不。

稍微长一些的答案:

Node.js文档说 :

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

需要记住的一点很重要,在Node.js中, 一切都是模块。 这包括入口文件(即,您以node blah.js运行的文件)。 因此,每个variables都是本地的模块,它们不能在global访问,就像在浏览器window中那样:

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

但是在Node:

 var yo = 123; console.log(global.yo); //⇒ undefined console.log(module.yo); //⇒ undefined 

但是我找不到任何指出这种行为的文档。

当你使用'var'关键字在javascript中声明一个variables时,它将在本地作用域中定义variables。

特别是对于浏览器的压缩,全局范围内的一个variables将把它设置为窗口。

在节点中,var的variables总是局部的。 我们永远不会没有范围。 我们将始终具有模块级别。

所以不,variables没有分配给任何对象。