例如,假设我们有文件GetWindow(GW_OWNER)
:
required-module.js
现在假设在var RevealedModule = function()({
var count = 0;
var incrementCount = function (){
return count++;
}
incrementCount(); //sets `count` equal to 1
return {
incrementCount: incrementCount
}
})();
module.exports = RevealedModule;
和file1.js
我们位于顶部
file2.js
问题:
RevealedModule现在有多少个实例?也就是说,是否只有一个实例被所有这些文件同时引用,或者现在有3个单独的实例?
这些实例中的私有变量var RevealedModule = require('required-module.js');
现在是否等于count
或1
?
答案 0 :(得分:2)
模块只加载一次。因此,即使您在module.exports
中返回自执行函数,它也只会执行一次。
来自文档:https://nodejs.org/api/modules.html#modules_caching
模块在第一次加载后进行缓存。这意味着(除其他外)每次调用require(' foo')将获得完全相同的返回对象,如果它将解析为同一文件。
以下是详细描述的完整node.js模块加载器进程:https://nodejs.org/api/modules.html#modules_all_together
答案 1 :(得分:1)
只有一个实例,因此每次需要()时都会得到一个实例。这是一个很好的解释:
http://willi.am/blog/2014/10/12/understanding-nodes-require-function