今天,我们来玩一下深拷贝和浅拷贝吧。可以吧,别给我面子,随便玩,啥姿势都行。
说深浅拷贝之前,我们先来谈一谈JS的存储,JS变量存储有栈存储和堆存储,基本数据类型存放在栈中,而复杂数据类型存放在堆中,复杂数据类型的引用数据类型的地址存储在栈中
来看看上面这张图,应该还是比较清晰的,可能有的朋友会问,不是要要说深浅拷贝吗?怎么扯到变量存储了,别急嘛,做正事前不得有个前戏啥的才舒服嘛,对吧
来,我们赶紧开始做正事
先来说一下深拷贝:当一个对象拷贝另一个对象,其中一个对象的数据发生改变不会影响另一个对象的数据,因为拷贝的是原来对象的数据。
浅拷贝:当一个对象拷贝另一个对象的时候,只要其中一个对象发生改变那另一个对象也发生改变,因为浅拷贝拷贝的是对象的地址。
大家可以结合着上面的数据存储来理解一下子
再给大家举一个大栗子
假设你现在电脑中有一个文件夹,你把它复制了,那你改变其中一个文件夹里的数据另一个文件夹的内容会不会变,这个就是深拷贝
那现在我们给文件创建两个快捷方式,你通过其中一个快捷方式进入文件夹修改了数据,那用另一个快捷方式进入文件夹时文件夹的内容是否被改变了,这就是浅拷贝
薛微等一会啊,我去给你们做个小黄图
我做好了,准备发车
文件夹2是由文件夹一复制过去的(相当于深拷贝)
由于文件夹2是由文件夹1复制过去的,改变文件夹2的内容不会影响文件夹1,改变文件夹1的内容也不会影响文件夹2,那这个就是深拷贝的一个原理
下面我们再来看看浅拷贝,我放一个图你就懂了
两个快捷方式都指向文件夹1,当我打开其中一个快捷方式并且修改里面的内容时,再打开另一个快捷方式,他里面的内容也会改变,这就是浅拷贝的一个原理
原理大体就是这个样子,实际上还是挺简单的,大家理解一下吧,我去欣赏会百度云的学习资料好吧,百度云里还由好多老师等着教我知识呢
来源:oschina
链接:https://my.oschina.net/u/4322747/blog/3279230