私はこれに対する答えを探すための専門用語がわかりません。与えられた:(?)配列要素の代入は、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を含むオブジェクト(配列を含む)は、参照のみでアクセスされます。 (すなわちfoo = []
は配列を生成し、その配列への参照をfoo
に割り当てます)。
したがって、オブジェクトの参照である配列の最初の値のコピーを取得します。
これは、配列の最初の値への参照とは異なります。与えられ
:reference
は、配列内の最初の値を参照した場合
var array = [ { value: 1 } ];
var reference = array[0];
array.unshift({ value: 2 });
、その後、最初の値を変更することによって、それがvalue : 2
でオブジェクトを指し示すことになります。
値のコピーであるため、オブジェクトへの参照は引き続きvalue : 1
(配列の2番目の値)になります。
これは、要素が1つのみのオブジェクトの配列です。したがって
this.snake[0]
{x:0、y:0}への参照が含まれます。
パラス
今curHead
とsnake[0]
は正確に同じメモリ位置を指します。 curHead
で値を変更してみてください、それはあなたがcurhead
に完全に新しいオブジェクトを割り当てるしようとすると、snake[0]
同様
curhead.x = 1
console.log(curhead)
//Object {x: 1, y: 0}
console.log(this.snake)
//[{x: 1, y: 0}]
楽しい事が起こる、curhead = 'hi'
を言うことができます変更されます。次にjavaScriptはcurhead
の新しいヒープスペースを作成し、this.snake
はその値に変更されません{x: 1, y: 0}
'curhead'は参照を持ちます。 – jcubic