You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript导出对象深拷贝:各导入模块是否获不同副本?

问题解答

所有导入该模块的代码,都会接收到同一个对象副本。

原因是Node.js的模块系统自带缓存机制:当模块第一次被加载时,会执行模块内的代码,将module.exports的结果存入缓存。后续任何模块再次导入它时,不会重新执行模块代码,直接返回缓存里的那个对象。

哪怕你用JSON.parse(JSON.stringify(obj))创建了新对象,这个对象也只会在模块首次加载时创建一次,之后所有导入操作拿到的都是缓存里的这个实例。

可以用以下代码验证:

// 导出模块(比如test.js)
const obj = {A: 2};
module.exports = JSON.parse(JSON.stringify(obj));

// 导入模块1
const obj1 = require('./test.js');
obj1.A = 3;

// 导入模块2
const obj2 = require('./test.js');
console.log(obj2.A); // 输出3,说明obj1和obj2是同一个对象

内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:20:26