使用MessageChannel 创建一个双下通道,在单独的上下文中传输数据,可以避免源数据受影响。
const deepClone = (obj) => {
return new Promise((resolve, reject) => {
const { port1, port2 } = new MessageChannel();
port1.onmessage = (event) => {
resolve(event.data);
};
port2.postMessage(obj);
});
};
const obj = { a: 1, b: 22 };
const c = await deepClone(obj);
obj.a = 11;
console.log(c);