var a={p1:'a1'};
var b={p1:a.p1};
a.p2='b1';
b.p3='b3';
console.log(a);
console.log(b);
console.log(a==b);
var a={p1:'a1'};
var b=a;
a.p2='b1';
b.p3='b3';
console.log(a);
console.log(b);
console.log(a==b);
以上两段代码的执行结果是不一样的!尽管看起来似乎是一样的。这里有个很重要的知识点,就是变量申明的时候是否是个独立的有内存空间的变量还是引用别人的变量的变量。这句话听起来有点绕口,下面给详细说明一下:首先把上面2段代码的结果截图给大家:
var a=b;
对于这种变量申明,其实就是把b的地址指给a,a和b共用一个地址,所以一个变了另一个也跟着变了。但如果var a={p:b.p}这种,就相当于在内存中给b也开了一个存储空间,并且把b的值复制过来给a了。尽管他们的值是一样的,但地址是不一样的。