我不知道的术语来搜索答案。鉴于:赋值数组元素复制或引用javascript中的元素?
this.snake = [{x: 0, y: 0}];
var curhead = this.snake[0];
是否curhead
包含snake[0]
字典的复印件或直接引用它(?)?
我不知道的术语来搜索答案。鉴于:赋值数组元素复制或引用javascript中的元素?
this.snake = [{x: 0, y: 0}];
var curhead = this.snake[0];
是否curhead
包含snake[0]
字典的复印件或直接引用它(?)?
的JavaScript总是值的副本。
JavaScript中的对象,包括数组,只是有史以来参考访问虽然。 (即foo = []
生成一个数组并将其引用赋予foo
)。
所以,你将数组,这是对对象的引用中获得的第一个值的副本。
这不同于对数组中第一个值的引用。
鉴于:
var array = [ { value: 1 } ];
var reference = array[0];
array.unshift({ value: 2 });
如果reference
是阵列中的第一个值的引用,则通过改变第一值将指向物体value : 2
。
既然是值的副本,它仍然是一个参考对象与value : 1
(即现在的阵列中的第二值)。
它是对象的数组只有一个元素。所以
this.snake[0]
将包含对{x:0,y:0}的引用。
帕拉斯
现在curHead
和snake[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将为curhead
和this.snake
创建一个新的堆空间将保持不变为其值{x: 1, y: 0}
'curhead'将有一个参考。 – jcubic