第一种

function deepClone(obj) {
  const objectMap = new Map();
  const _objectMap = (value) =>{
    const type = typeof value;
    if (type !== 'object' || type === null) {
      return value
    }
    if (objectMap.has(value)) {
      return objectMap.get(value)
    }
    const result = Array.isArray(value) ? [] : {};
    objectMap.set(value, result);
    for (const key in value) {
      result[key] = _objectMap(value[key])
    }
    return result
  };
  return _objectMap(obj)
}

第二种

function deepClone(obj) {
  return new Promise((resolve) => {
    const { port1, port2 } = new MessageChannel();
    port1.postMessage(obj)
    port2.onmessage = (msg) =>{
      resolve(msg.data)
    }
  })
}