簡體   English   中英

當Node.js中的多個文件需要一個模塊時,會發生什么情況?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM