module.exports和局部variables

我正在尝试创build一个小型的networking应用程序,我有一个关于module.exports的问题

假设我有一个文件counter.js

 var counter = 0; module.exports = { add: function() { counter++; }, get: function() { return counter; } } 

我尝试在几个文件中引用这个文件,假设app.jscount.js都位于同一目录中

 // from app.js var a = require('./counter.js'); a.add(); console.log(a.get()); // the value is 1 // from count.js var b = require('./counter.js'); b.add(); console.log(b.get()); // the value is 2? 

值是1还是2?

结果将是2

nodejs.org文档

模块在第一次加载后被caching。 这意味着(除其他外) 每个调用require('foo')将得到完全相同的对象返回 ,如果它将parsing为相同的文件。

多次调用require('foo')可能不会导致模块代码被多次执行。 这是一个重要的function。 有了它,“部分完成”的对象可以被返回,从而允许传递依赖被加载,即使它们会导致循环。

如果你的意思是(例如) app.js将通过require()包含count.js ,或者app.jscount.js将通过require()包含在第三个文件中,那么它们都共享一个实例,答案是2

如果你的意思是如果你运行node app.js然后运行node count.js会发生什么情况,那么在这种情况下,每个文件都会得到它自己所需模块的实例,所以它将是1