2016-07-05 66 views
1

我試圖創建一個小的Web應用程序,我有一個關於module.exports問題module.exports和局部變量

supppose我有一個文件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?

回答

1

如果你的意思是(例如)app.js將包括count.js通過require()或兩個app.jscount.js將通過require()被包括在由第三個文件,那麼他們都有一個實例,答案是2

如果你的意思是,如果你運行node app.js然後運行node count.js,會發生什麼,然後在這種情況下,每個文件都有自己所需的模塊實例,所以這將是1

+0

有沒有辦法讓變量計數器被兩個文件共享? – Rockstar5645

+0

是的。我已經更新了我的答案。 – Trott

+0

我的意思是'app.js'和'count.js'是兩個獨立的文件,包括'counter.js'通過'require()' – Rockstar5645

1

其結果將是2

nodejs.org DOC

模塊是它們被加載在第一時間之後緩存。這意味着(除其他外)每次調用require('foo')將得到完全相同的對象返回,如果它將解析爲相同的文件。

多次調用require('foo')可能不會導致模塊代碼被多次執行。這是一個重要的功能。通過它,可以返回「部分完成」的對象,從而允許傳遞依賴被加載,即使它們會導致循環。