在我的server.js中:
如果我输入:
var yo = 123;
console.log(global.yo); // undefined
console.log(this.yo); // undefined
浏览器中的这将是window.yo,那么节点中是否有一些存储此变量的对象?
答案 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。我们永远不会没有范围。我们总是有模块级别。
所以不,该变量未分配给任何对象。