1. 变量的引用。看例子,在浏览器控制台输入以下2行代码:
var obj1={a:1};
var obj2=obj1; //变量的引用
obj2=obj1,表示obj2是obj1的引用,并不是把obj1复制给obj2,此时接着输入:
obj2 == obj1 //输出true
而接着输入
boj1.b = 2
console.log(obj2) // {a:1,b:2}
因而看得出,obj1改变时,obj2跟着改变,又印证了obj2这是obj1的引用,而并不是复制。
2. 变量的复制。如何真正把obj1完整复制到obj2,从而这2个变量之后的改变相互不影响?
答案是:深拷贝。阮一峰老师有一篇文章讲得很好,就不啰嗦了。原文链接
实现的函数是:
function deepCopy(p, c) {
var c = c || {};
for (var i in p) {
if (typeof p[i] === 'object') {
c[i] = (p[i].constructor === Array) ? [] : {};
deepCopy(p[i], c[i]);
} else {
c[i] = p[i];
}
}
return c;
}
网友评论