【发布时间】:2014-05-06 18:10:38
【问题描述】:
我有两个使用相同模块的不同 js 文件。
file1.js:
var mod1 = require('commonmodule.js');
mod1.init('one');
file2.js:
var mod2 = require('commonmodule.js');
mod2.init('two');
(这两个文件file1.js,file2.js都加载在我的server.js文件中,它们本身就是模块)
现在在 commonmodule.js 中:
var savedName;
exports.init = function(name)
{
savedName = name;
}
exports.getName = function()
{
return savedName;
}
我注意到这个 savedName 总是被覆盖,这取决于最后设置它的人。所以它似乎不起作用。我如何获得一个模块来维护状态?
注意:我也尝试在 commonmodule.js 中将 savedName 设置为exports.savedName 但它也不起作用
【问题讨论】:
-
不,因为模块被缓存,所以任何更改都会在任何地方生效。那你的问题是什么?如何解决?为什么?
-
是的,我想知道如何在模块内维护状态
-
这就是
maintained的状态。也许您想问如何为每个模块获取隔离状态? -
模块实际上是 IIFE,并且您定义的变量是 IIFE 闭包的一部分。 @miguel-mota 的解决方案适用于您的方案,因为该变量已在
CommonModule函数中定义,因此是该函数闭包的一部分。
标签: javascript node.js