【问题标题】: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 中的一个新概念。 (const 和 class 也是如此。)但是如果您使用 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,但当然最好避免使用全局变量。