浅拷贝
首先,一个简单的例子来理解
a=[1,2,3]; b=a; a.push(4); b.push(5); a,b分别是多少?
解答:b=a;是引用关系,不是赋值关系。所以不仅值相等,内存地址也相等,相对于原型是同一个地址。
a.push(4);相对于在原型中添加了4,
b.push(5);相对于在原型中添加了5。
a和b都是[1,2,3,4,5];
但是,简单的变量,内存小,我们直接复制不会发生引用
var a=123; var b=a; a=123456; alert(a); //123456 alert(b); //123 //或者是 var a='afafas'; var b=a; a='fgfdsdsgs'; alert(a); //fgfdsdsgs alert(b); //afafas
而对于对象这种内存占用比较大的来说,直接让复制的东西等于要复制的,那么就会发生引用,因为这种复制,只是将复制出来的东西的指向指向了要复制的那个东西。
简单的说,就是两个都同时指向了一个空间,如果改变其中一个,另一个也会发生变化,这就发生了引用。