我目前遇到的问题是我有两个模块,我称之为需要能够修改同一个变量。
我决定创建一个名为global.APP_NAME = {}
的全局变量,并存储我需要的变量。
但我一直在读,使用全局变量是不好的做法。为什么?
我只创建一个变量,不应该与其他任何东西发生碰撞,因为它是我的应用程序的名称。
答案 0 :(得分:12)
几乎所有编程语言都认为全局变量是一种反模式,因为它们很难跟踪和调试代码。
当你有两个共享数据的模块时,你应该创建一个包含该数据的对象,并将其显式传递给需要它的每个函数(并且只传递那些实际存在的函数)。
答案 1 :(得分:2)
您可以阅读大多数评论和其他答案,为什么有一个全球性的不良做法。但是,node.js应用程序通常从中心点运行,如“app.js”,“server.js”或类似的东西。
在这种情况下,你可以保留某种“配置”(你说你需要APP_NAME.users)作为该文件的配置选项。所以在“app.js”中你有:
var config = {
myVar: 100
}
如果您需要在某些模块中访问此变量,请将其作为参数传递。 IE浏览器。在全局文件中将其命名为:
var module = require('./lib/myModule.js').init(config);
现在你的模块可以导出它的init函数,以便它设置自己的config本地副本。例如:
var localConfig = null;
exports.init = function(config) {
// merge the two config objects here
localConfig.myVar = config.myVar;
}
最后,您可以让本地代码使用私有值来影响全局对象。您的模块中有类似的内容:
exports.modifyGlobalConfig = function() {
global.myVar = myLocalValue;
}
然后,您的全局app.js将使用该方法修改其全局值。