淺拷貝

首先,一個簡單的例子來理解spa

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];blog

可是,簡單的變量,內存小,咱們直接複製不會發生引用內存

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

而對於對象這種內存佔用比較大的來講,直接讓複製的東西等於要複製的,那麼就會發生引用,由於這種複製,只是將複製出來的東西的指向指向了要複製的那個東西。原型

簡單的說,就是兩個都同時指向了一個空間,若是改變其中一個,另外一個也會發生變化,這就發生了引用。class

相關文章
相關標籤/搜索