这是一些代码
// app.js
let foo = 3;
let bar = 35;
在浏览器中,我可以做window.foo
,我会得到我的3
,如果我做window.bank = 'lalala'
它会和我写的一样
let foo = 3;
let bar = 35;
let bank = 'lalala'
我在 Node.js 中需要同样的东西,该对象引用模块的全局范围。我知道global
变量,但这不是我需要的,因为我想本地全局到当前模块,而不是整个节点应用程序
这是一些代码
// app.js let foo = 3; let bar = 35;
在浏览器中,我可以做 window.foo,我会得到我的 3
不是在使用 JavaScript 引擎的浏览器中正确实现let
你不会。 let
创建全局变量,但不创建全局对象的属性。这是ES2015中的一个新概念。(const
和class
也是如此。但是如果你使用var
而不是let
,是的,它会在浏览器中显示为全局对象的属性(您可以window
访问)。
如何在节点中访问模块全局变量.js
没有内置机制。NodeJS 在模块作用域函数中运行您的代码,因此您在该代码的顶层声明的变量不是全局变量,也不会自动添加到任何可访问的对象中。
如果您希望在对象上访问它们,则需要显式使用对象:
let locals = { // or even `const locals = {` since you won't change the object, just its properties
foo: 3,
bar: 35
};
(在松散模式下,可以在没有明确引用locals
的情况下使用它们,但我建议始终使用严格模式,并建议即使您处于松散模式,也建议不要使用所述机制(备受诟病的with
语句)。 with
被诟病严重,并且在严格模式下被禁用是有原因的。:-)我提到它只是为了完整。
对于真正的全局变量,你可以使用 NodeJS 的全局global
,但当然通常最好避免全局变量。