JavaScript变量的复制与引用

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;
  }

你可能感兴趣的:(JavaScript变量的复制与引用)