1. 變量的引用抢呆∷柘鳎看例子,在瀏覽器控制臺輸入以下2行代碼:
var obj1={a:1};
var obj2=obj1; //變量的引用
obj2=obj1镀娶,表示obj2是obj1的引用立膛,并不是把obj1復(fù)制給obj2,此時(shí)接著輸入:
obj2 == obj1 //輸出true
而接著輸入
boj1.b = 2
console.log(obj2) // {a:1,b:2}
因而看得出梯码,obj1改變時(shí)宝泵,obj2跟著改變,又印證了obj2這是obj1的引用轩娶,而并不是復(fù)制儿奶。
2. 變量的復(fù)制。如何真正把obj1完整復(fù)制到obj2鳄抒,從而這2個(gè)變量之后的改變相互不影響闯捎?
答案是:深拷貝。阮一峰老師有一篇文章講得很好许溅,就不啰嗦了瓤鼻。原文鏈接
實(shí)現(xiàn)的函數(shù)是:
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;
}