這是因爲你b
只是複製參考a
。
因此,他們有相同的參考副本,但他們各自有自己的該參考的副本。
var a = ["a"];
// b now holds a copy of the reference from a
var b = a;
// when you change a, b is unaffected since it has an independent reference
// a now points to a new location in memory
// a has a new reference, whereas b still has the reference from before
a = ["wtv"];
然而,由於這兩個變量做具有相同的參考,即使他們是副本,您可以將對象或數組本身更改數據,並將它會影響這兩個變量。
藉此例如:
// a points to a location in memory
var a = [];
// we give a some value
a["foo"] = 'bar';
// b now has a *copy* of a's location in memory
var b = a;
// since b shares the same location in memory as a, it has the same foo value
console.log(b.foo); // => bar
// we update a's foo value
a["foo"] = 'baz';
// since b still shares the same location in memory as a,
// it's pointing to the same foo from a, therefore it's also affected
console.log(b.foo); // => baz
@Hidde有一個偉大的形象,有助於想象這是怎麼回事與存儲指向在幕後。