这是因为你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有一个伟大的形象,有助于想象这是怎么回事与存储指向在幕后。