2016-05-17 122 views

回答

4

的JavaScript总是值的副本。

JavaScript中的对象,包括数组,只是有史以来参考访问虽然。 (即foo = []生成一个数组并将其引用赋予foo)。

所以,你将数组,这是对对象的引用中获得的第一个值的副本。


这不同于对数组中第一个值的引用。

鉴于:

var array = [ { value: 1 } ]; 
var reference = array[0]; 
array.unshift({ value: 2 }); 

如果reference是阵列中的第一个值的引用,则通过改变第一值将指向物体value : 2

既然是值的副本,它仍然是一个参考对象与value : 1(即现在的阵列中的第二值)。

0

在这个例子中你给,curhead将包含一个参考的第一个项目在数组中snake

+0

gee我很想知道为什么会得到一个downvote。 – Jamiec

+0

我也是。谢谢你的帮助! – sam

0

它是对象的数组只有一个元素。所以

this.snake[0] 

将包含对{x:0,y:0}的引用。

帕拉斯

-1

现在curHeadsnake[0]指的是完全相同的内存位置。尝试改变curHead值时,它会改变snake[0]以及

curhead.x = 1 
console.log(curhead) 
//Object {x: 1, y: 0} 
console.log(this.snake) 
//[{x: 1, y: 0}] 

有趣的事情发生了,当您尝试一个完全新的对象分配给curhead,可以说curhead = 'hi'。然后,javaScript将为curheadthis.snake创建一个新的堆空间将保持不变为其值{x: 1, y: 0}

+0

“到完全相同的内存位置” - 这是一个实现细节。 – Quentin

+0

@sam如果答案有帮助,请点击upvote部分旁边的复选标记以表示接受。 – sapy