如何在 Node 中访问模块全局变量.js例如浏览器中的 window.variable

How to access module global varibales in Node.js like window.variable in the browser

本文关键字:浏览器 variable window js 模块 Node 访问 全局变量      更新时间:2023-09-26

这是一些代码

// 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中的一个新概念。(constclass也是如此。但是如果你使用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,但当然通常最好避免全局变量。