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没有分配给任何对象。