Heading for the future

深拷贝和浅拷贝

  今天,我们来玩一下深拷贝和浅拷贝吧。可以吧,别给我面子,随便玩,啥姿势都行。

  说深浅拷贝之前,我们先来谈一谈JS的存储,JS变量存储有栈存储和堆存储,基本数据类型存放在栈中,而复杂数据类型存放在堆中,复杂数据类型的引用数据类型的地址存储在栈中

  来看看上面这张图,应该还是比较清晰的,可能有的朋友会问,不是要要说深浅拷贝吗?怎么扯到变量存储了,别急嘛,做正事前不得有个前戏啥的才舒服嘛,对吧

  来,我们赶紧开始做正事

  先来说一下深拷贝:当一个对象拷贝另一个对象,其中一个对象的数据发生改变不会影响另一个对象的数据,因为拷贝的是原来对象的数据。

       浅拷贝:当一个对象拷贝另一个对象的时候,只要其中一个对象发生改变那另一个对象也发生改变,因为浅拷贝拷贝的是对象的地址。

  大家可以结合着上面的数据存储来理解一下子

  再给大家举一个大栗子

  假设你现在电脑中有一个文件夹,你把它复制了,那你改变其中一个文件夹里的数据另一个文件夹的内容会不会变,这个就是深拷贝

  那现在我们给文件创建两个快捷方式,你通过其中一个快捷方式进入文件夹修改了数据,那用另一个快捷方式进入文件夹时文件夹的内容是否被改变了,这就是浅拷贝

  薛微等一会啊,我去给你们做个小黄图

  我做好了,准备发车

  

  文件夹2是由文件夹一复制过去的(相当于深拷贝)

  

  

  由于文件夹2是由文件夹1复制过去的,改变文件夹2的内容不会影响文件夹1,改变文件夹1的内容也不会影响文件夹2,那这个就是深拷贝的一个原理

 

  下面我们再来看看浅拷贝,我放一个图你就懂了

   

  两个快捷方式都指向文件夹1,当我打开其中一个快捷方式并且修改里面的内容时,再打开另一个快捷方式,他里面的内容也会改变,这就是浅拷贝的一个原理

  原理大体就是这个样子,实际上还是挺简单的,大家理解一下吧,我去欣赏会百度云的学习资料好吧,百度云里还由好多老师等着教我知识呢

posted @ 2018-09-30 14:02  一只菜鸟攻城狮啊  阅读(450)  评论(0编辑  收藏  举报