首先我们要明白深拷贝和浅拷贝最根本的区别
通俗解释来说,就是
假设B复制了A,修改B的时候,看A是否发生变化:
如果A跟着也变了,说明是浅拷贝,拿人手短!(修改堆内存中的同一个值)
如果A没有改变,说明是深拷贝,自食其力!(修改堆内存中的不同的值)
浅拷贝(shallowCopy)只是增加了一个指针指向已存在的内存地址。
深拷贝(deepCopy)是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存
浅拷贝例子:
let a = {name: 'zhangs', age: 12}
let b = a
b.name = 'lisi'
console.log(a) // {name: 'lisi', age: 12}
console.log(b) // {name: 'lisi', age: 12}
深拷贝例子:
function deepClone(obj) {
let newObj = obj instanceof Array ? [] : {};
if(typeof obj !== 'object') {
return obj;
}else{
for(var i in obj) {
newObj[i] = typeof obj[i] === 'object' ? deepClone(obj[i]) : obj[i];
}
}
return newObj;
}
let a = [1,2,3,4,5]
let b = deepClone(a)
b[0] = 111
console.log(a) // [1,2,3,4,5]
console.log(b) // [111,2,3,4,5]