[英]What happens when a module is required by more than one file in Node.js?
例如,如果有一個文件foo.js ,其變量x初始化為數字1。x是從文件中的module.export -ed。 現在,如果另外兩個JavaScript文件中都需要foo.js,則在這兩個文件中x的值都分別更改為5和10。 在這種情況下到底會發生什么? 是x的三個不同副本,還是只有一個x,並且根據最后運行的文件,x將保留該值?
如果x
是不可變的值,則在您的方案中它將x
作為1傳遞給這兩個文件。 如果以后在其他文件中更改x
。 原始x
不會改變。
// foo.js
let x = 1;
setTimeout(() => {
console.log('original: ', x);
}, 1000);
module.exports = x;
//a.js
let x = require('../lib/foo');
x = 2;
console.log('required x: ', x);
//output
require x: 2
original: 1
如果x
是可變值,則無論在哪里更改它,都會在使用x
地方影響所有x
。
// foo.js
let x = {
a: 1
};
setTimeout(() => {
console.log('original: ', x);
}, 1000);
module.exports = x;
//a.js
let x = require('../lib/foo');
x.a = 2;
console.log('required x: ', x);
//output
require x: {a: 2}
original: {a: 2}
實際上,這取決於x是引用類型還是值類型。 如果x是引用類型,則其屬性在一個文件中的變異會反映在另一文件中。
在您的示例中,x是一個值類型,因此當您更改其值時,它會創建它的副本。
對require()的調用被緩存,因此應該沒有太大的區別。此外,對require()的調用也處於阻塞狀態,因此,在處理它們時,Node不會運行其他任何操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.