【问题标题】:How to access module global varibales in Node.js like window.variable in the browser如何访问 Node.js 中的模块全局变量,如浏览器中的 window.variable
【发布时间】:2016-07-06 22:55:47
【问题描述】:

这里有一些代码

// 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 变量,但这不是我需要的,因为我想本地全局到当前模块,而不是整个节点应用程序

【问题讨论】:

标签: javascript node.js module scope require


【解决方案1】:

这里有一些代码

// app.js
let foo = 3;
let bar = 35;

在浏览器中我可以做 window.foo ,我会得到我的 3

不在使用正确实现let 的 JavaScript 引擎的浏览器中,您不会。 let 创建一个全局变量,但不是全局对象的属性。这是 ES2015 中的一个新概念。 (constclass 也是如此。)但是如果您使用 var 而不是 let,是的,它会显示为全局对象的属性(您可以使用 window 访问)浏览器。

如何在 Node.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 global,但当然最好避免使用全局变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-25
    • 2015-02-19
    • 2011-05-07
    • 2021-05-04
    • 2013-01-28
    • 2015-02-27
    • 2013-04-02
    • 2016-05-04
    相关资源
    最近更新 更多