2013-08-30 61 views
0

我有這樣的非常小的一段代碼重複的變量被複制

for(var i = 0; i < 4; i ++) 
{ 
    var ball = balls[i]; 
    totalBalls.push(ball); 
} 

當我嘗試此

console.log(totalBalls[0].xPos) // = 10 
console.log(totalBalls[1].xPos) // = 10 
balls.xPos += 10; 
console.log(totalBalls[0].xPos) // 20 
console.log(totalBalls[1].xPos) // 20 

爲什麼是陣列相同的第二元件作爲數組中的第一個元素?

+2

什麼在'球'? –

+2

_Objects_是引用 –

+0

沒有看到「球」數組如何初始化,很難給出準確的答案。 – Pointy

回答

2

爲什麼數組中的第二個元素與數組中的第一個元素相同?

對象保持作爲參考,即

a = {foo: 'bar'}; 
a.foo; // "bar" 
b = a; 
b.foo = null; 
a.foo; // null 

所以當你做push,它不會創建一個新的對象這是ball克隆,而是創建一個新的參考已經存在ball的地方。