记录一个办公时遇到的问题---关于js值传递

57 阅读2分钟

本人前端菜鸡一只,前端时间在日常开发工作时碰到一个小问题,纠结了整整半天,百思不得其解。

下面是具体情况。在后端工程中,有一个公用方法,在用户登录页面时会调用,形成一条访问记录,有一个新的需求,想要用第三方供应商提供的平台来实现一个大屏来展示访问记录。但是有一个问题,原来的访问记录是存在mongo里的,但是第三方平台只能连接mysql,只能在原先的基础上,再加上插入mysql的操作。两个方法同步执行,用的一个共同的参数,然后mysql预设的参数和mongo要存的参数不一致,需要修改。这时就出问题了,在往mongo插入数据时,需要先建立mongo连接,这个方法是一个异步方法,并且原先的mongo里有对参数的重新赋值,在mongo执行的同时,mysql插入操作那里已经完成了参数的修改,因为是地址引用,mysql操作这边相当于修改了源数据,刚好mongo也重新赋值,这就导致了mongo存的值和mysql存的值一样了。最后的解决方法是,在mongo建立连接前,先深拷贝获取参数,再建立连接,赋值,即可解决。

在 JavaScript 中,对象是引用类型的数据。当你将一个对象传递给函数时,实际上传递的是对该对象的一个引用,而不是对象的副本。这意味着,如果函数内部修改了这个对象,那么原始对象也会被修改,因为它们都指向内存中的同一个对象。理解 JavaScript 中的引用类型和值类型是理解这个问题的基础。引用类型(如对象和数组)是通过引用传递的,而值类型(如字符串、数字和布尔值)是通过值传递的。