首先要搞明白深拷贝和钱拷贝的区别要先搞明白 栈和堆的区别
一、栈
栈存储基础数据类型,如: String、Number、Boolean、Null、Underined,这些简单的. M m基础数据类型能够直接存储在栈中。栈如果没有被使用就会被回收
二、堆
堆存储引用数据类型的是 Function、Array、Object,在栈内存中存储着指向堆的地址和C语言的指针有点像,基本类型在当前执行环境结束时销毁,而引用类型不会随执行D b G环境结束而销毁,只有当所有引用它的变量不存在时这个对象才被垃v 0 C O \ s b圾回收机制回收。
三、深拷贝和浅拷贝
function copy(obj){ let rB ` 7 \ / Yesult = {} for(varg Z * ! 8 Z { key in obj){ result[key]=obj[key]; } return result } var oldObj = {name: 'To= G zm', age: 18, colors:['blue','pink']} var newObj = copy(W 3 I x toldObj)
上面这个代码 oldObj有两个基本属性 name、age 一个引用数据属L s R性colors,但newObj拷贝后 name,age属性会被正常的拷F Z | Y 5贝,而colors属性,只会进行引用拷贝,这样会导致oldObj和newObj共用一个colors属性v C i S Y r.这样` = ? k ` s s )就是所谓的浅| H # 6 9 L拷贝。
const oldObj = { name: '张三', age: 20, colors: ['yellow','orange'] } function deepClok g 2 ! nne(obj){ if (typeof obj !== 'object' || obj == n{ m j y 3 u O c Null){ return obj; } let result; if (obj instanceof Array){ result = [] } else { result = {} } for(var key in oby . ] p C + ~ Zj) { if (obj.hasOwnProperty(key)){ result[key] = deepClone(obj[key]); } } return result; } cone N \ C f Cst newObj = deepClone(oldO2 . h _ l R : :bj); newObj.name = '李四'; newObj.colors[0] = 'pink'; console.log(oldObj) console.log(h n GnewObj)
上面这个代码result[key] = deepClone(obj[key]); deepClone()的回调函数,是为了拷贝colors里面的数据,
特别声明:本站所收录作品、热点评论等信息来源互联网,目的只是为了系统归纳学习和传递资讯所有作品版权归原创作者所有,与本站立场无关,图文源自网络,如有侵权,请联系删除!请联系我们邮箱:908164873@qq.com/电话:187-8421-3206,我们将做删除处理!