例如,
如果我有2个模块try1.js和try2.js
try1.js
module.exports.msg = "hello world";
try2.js
try1 = require('./try1');
try1.msg = "changed message";
try2.js中msg内容的变化是否会影响try1.js中msg的尝试值?
答案 0 :(得分:6)
根本没有副本。 module.exports
是一个对象,该对象直接共享。如果您修改该对象的属性,则所有已加载该模块的人都将看到这些更改。
try2.js中msg内容的变化是否会影响try1.js中msg的尝试值?
是的,确实如此。没有副本。 exports对象直接共享。您对该导出对象所做的任何更改都将被使用该模块的所有人看到。
仅供参考,模块可以使用Object.freeze(module.exports)
来阻止在添加所需属性后对该对象进行更改。
答案 1 :(得分:1)
是的,它会影响它。尝试执行以下操作。将此代码保存到文件m1.js:
module.exports.msg = 'hello world';
module.exports.prn = function() {
console.log( module.exports.msg );
}
然后运行节点控制台并尝试以下操作:
> const m1 = require('./m1')
undefined
> m1.prn()
xxx
> m1.msg = 'changed'
'changed'
> m1.prn()
changed