我目前面临一个问题,我有两个我调用的模块需要能够修改同一个变量。
我决定创建一个名为的全局变量global.APP_NAME = {}
并将我需要的变量存储在其中。
但我一直在读到使用全局变量是不好的做法。为什么?
我只创建一个变量,它不应该与其他任何东西发生冲突,因为它是我的应用程序的名称。
我目前面临一个问题,我有两个我调用的模块需要能够修改同一个变量。
我决定创建一个名为的全局变量global.APP_NAME = {}
并将我需要的变量存储在其中。
但我一直在读到使用全局变量是不好的做法。为什么?
我只创建一个变量,它不应该与其他任何东西发生冲突,因为它是我的应用程序的名称。
在几乎所有编程语言中,全局变量都被认为是一种反模式,因为它们使得代码很难跟踪和调试。
当您有两个共享数据的模块时,您应该使用该数据创建一个对象并将其显式传递给每个需要它的函数(并且只有那些实际需要它的函数)。
您可以从大多数评论和其他答案中阅读为什么全球认为不好的做法。然而,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 函数,以便它设置自己的本地配置副本。例子:
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 将使用该方法来修改它的全局值。