首先,一個簡單的例子來理解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