首页 > 解决方案 > 当 Node.js 中的多个文件需要一个模块时会发生什么?

问题描述

例如,如果有一个文件foo.js带有一个变量x,该变量用数字 1 初始化。x 是文件中的 module.export 。现在,如果在另外两个 javascript 文件中需要 foo.js,并且 x 在这两个文件中的值分别更改为 5 和 10。在这种情况下究竟会发生什么?x 是否存在三个不同的副本,或者只有一个 x,并且根据最后运行的文件,x 将保持该值?

标签: javascriptnode.jsnode-modules

解决方案


如果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使用它的地方。

// 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}

推荐阅读