function deepClone (data) {
return new Promise (resolve => {
const { port1, port2 } = new MessageChannel();
port1.postMessage (data);
port2. onmessage = (result) => {
resolve(result.data)
}
})
}
const d1 = { a: 1, b: 2, c: 3 };
(async () => {
const newdata = await deepClone (d1);
d1.a = 123;
console.log(newdata)
})()