module.exports和局部变量

时间:2016-07-05 04:55:04

标签: node.js

我正在尝试创建一个小型网络应用,我对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 个答案:

答案 0 :(得分:1)

如果您的意思是(例如)app.jscount.js包括require(),或app.jscount.js将包含在第三个文件中通过require(),然后他们共享一个实例,答案是2

如果您指的是运行node app.js然后运行node count.js会发生什么情况,那么在这种情况下,每个文件都会获得所需模块的实例,因此它将是1

答案 1 :(得分:1)

结果将是2

  

来自 nodejs.org doc

模块在第一次加载后进行缓存。这意味着(除其他外)每次调用require(' foo')将获得完全相同的返回对象,如果它将解析为同一文件。

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