浅拷贝和深拷贝

首先我们要明白深拷贝和浅拷贝最根本的区别

通俗解释来说,就是

假设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]

你可能感兴趣的:(浅拷贝和深拷贝)