js如何传递在一次循环引用中,传递值?
js如何传递在一次循环引用中,传递值?
外面放一个全局变量,可以使用对象或者map将值放入其中,然后第二个函数里使用键引用即可;
const weakMap = new WeakMap() //解决对象的循环引用; export function deepClone(originValue) { const toString = Object.prototype.toString //2.引用数据类型object if (toString.call(originValue) === '[object Object]') { const newObj = {} //2.0循环引用问题 if (weakMap.has(originValue)) return weakMap.get(originValue) //如果map中已经有了这个引用,则直接返回map里的这个值即可; weakMap.set(originValue, newObj)return newObj } }
let obj = {foo:'bar'};
obj.circular = obj; //设置循环引用
deepClone(obj)
第二种方式:
export function deepClone(originValue, weakmap = new WeakMap()) { //使用在函数参数中定义weakmap,而不在全局中定义weakmap,这样可以避免每次调用deepclone时都往weakmap里插入数据,导致后期的weakmap将会成为一个非常的数据;
const toString = Object.prototype.toString //2.引用数据类型object if (toString.call(originValue) === '[object Object]') { const newObj = {} //2.0循环引用问题 if (weakMap.has(originValue)) return weakMap.get(originValue) //如果map中已经有了这个引用,则直接返回map里的这个值即可; weakMap.set(originValue, newObj)return newObj //2.1普通的key for (const key in originValue) { newObj[key] = deepClone(originValue[key], weakMap) } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!