【发布时间】:2022-11-25 06:24:00
【问题描述】:
const obj = {A: 2};
module.exports = JSON.parse(JSON.stringify(obj));
从上述模块导入的每个模块都会收到不同的副本吗?还是他们都会收到相同的副本?
【问题讨论】:
标签: javascript
const obj = {A: 2};
module.exports = JSON.parse(JSON.stringify(obj));
从上述模块导入的每个模块都会收到不同的副本吗?还是他们都会收到相同的副本?
【问题讨论】:
标签: javascript
简短回答:不,它将为每个返回相同的实例。
长答案:
我建议您阅读有关模块系统如何在 JavaScript/Node.js 中工作的信息。
一个好的心理模型是,当一个模块第一次被导入并运行其中的所有代码时,以便在返回它们之前将导出的变量设置为它们应该的样子。
下次导入时,会返回已经设置好的导出变量。每次导入它时,它不会再次运行模块源。
如果每次导入都需要不同的对象,则需要通过导出函数而不是值来生成一个对象:
const obj = {A: 2};
module.exports = () => JSON.parse(JSON.stringify(obj));
...之后
const uniqueObj = require("./mymodule")(); // call function
【讨论】: