深拷贝和浅拷贝

50 阅读2分钟

浅拷贝就是只拷贝了变量对应的地址,并没有在堆内存中产生新的结果

当拷贝时,拷贝了一个对象中的所有属性,包括Object和数组属性,这种拷贝被称为深拷贝

什么是深拷贝?

当拷贝时,拷贝了一个对象中的所有属性,包括Object和数组属性,这种拷贝被称为深拷贝 igmei并没有

浅拷贝,只拷贝了变量对应的地址,并没有在堆内产生新的结果。。 浅拷贝,只拷贝了变量对应的地址,并没有在堆内产生新的结果。。 深拷贝,拷贝了一个对象中的所有属性,包括object和数组属性,这种拷贝被称为深拷贝。

Event Loop即事件循环,是指浏览器或Node的一种解决javaScript单线程运行时不会阻塞的一种机制,也就是我们经常使用异步的原理。

事件循环的进程模型

Event Loop事件循环,指浏览器或Node的一种解决javaScript单线程运行时不会阻塞的一种机制,也就是我们经常使用异步的原理。

深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是引用。

假设B复制了A,修改A的时候,看B是否发生变化:

如果B跟着也变了,说明是浅拷贝,拿人手短!(修改堆内存中的同一个值)

如果B没有改变,说明是深拷贝,自食其力!(修改堆内存中的不同的值) 浅拷贝(shallowCopy)只是增加了一个指针指向已存在的内存地址,

深拷贝(deepCopy)是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存,

使用深拷贝的情况下,释放内存的时候不会因为出现浅拷贝时释放同一个内存的错误。

浅复制:仅仅是指向被复制的内存地址,如果原地址发生改变,那么浅复制出来的对象也会相应的改变。

深复制:在计算机中开辟一块新的内存地址用于存放复制的对象。引用一个变量对象的内存地址。没在堆内产生新结果。 浅拷贝,增加一个指针指向已存在的内存地址,深拷贝,增加一个指针,并申请了一个新内存,增加的指针指向这个新内存地址。拷贝了对象所有的属性,包括数组和对象属性, 并在堆内产生新结果。 let sum=0; for(var i=0;i<=100;i++){ sum+=i; } 复制代码

let sum =0; for(var i=0;i<=100;i++){ sum+=i; }