深拷贝和浅拷贝本质都是拷贝数据
深拷贝和浅拷贝的实质区别就是是否真正的完全复制某个实体
比如fn1复制了fn2
当fn2发生改变时:
浅拷贝中fn1也会随之改变,而深拷贝中fn1不会改变
浅拷贝是改变堆中的同一个值,而深拷贝是改变堆中的不同的值
浅拷贝:只是增加了一个指针指向已存在的内存地址
深拷贝:增加了一个指针指向并且申请了一个新的内存地址,指向这个新的内存地址
/*
拷贝:
对象之间
*/
var obj = {
a: {
e:1
},
b: 2
};
var obj1 = {
a: {
f: 5
},
b:3,
e: 'f'
};
var obj2 = {
c: 3
};
// $.extend(dest, src1, src2....) dest:要拷贝的对象 src: 被拷贝的数据 会改变拷贝对象
// 浅拷贝: 在拷贝的时候,如果属性名重复,那么就用后面的覆盖前面的
// var m = $.extend(obj, obj1, obj2);
// console.log(obj);
//console.log(m);
var n = $.extend({}, obj, obj1, obj2);
console.log(n); // 不改变原数据
// 深拷贝: $.extend(true, dest, src1, src2, ...) dest:要拷贝的对象 src: 被拷贝的数据 会改变拷贝对象
// 深拷贝:第一个参数设置为true的时候,进行深拷贝(递归拷贝), 如果属性名重复并且是对象, 对比下一层级的属性,如果属性名相同就用后面的覆盖前面的,如果还是对象,继续对比下一层级.
var mn = $.extend(true, {}, obj, obj1, obj2);
console.log(mn);