module.exports和局部variables
我正在尝试创build一个小型的networking应用程序,我有一个关于module.exports的问题
假设我有一个文件counter.js
var counter = 0; module.exports = { add: function() { counter++; }, get: function() { return counter; } }
我尝试在几个文件中引用这个文件,假设app.js
和count.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.js
和count.js
将通过require()
包含在第三个文件中,那么它们都共享一个实例,答案是2
。
如果你的意思是如果你运行node app.js
然后运行node count.js
会发生什么情况,那么在这种情况下,每个文件都会得到它自己所需模块的实例,所以它将是1
。