2017-03-18 10 views
1

jsでスネークゲームをコーディングしようとすると小さな問題が発生します。変数自体が変更されます

私はこの機能を持っている:

function move() { 

    var aux = []; 
    aux = snake.position[snake.position.length - 1]; 
    console.log(aux); 

    if (snake.direction == 'r') { 
     snake.position[snake.position.length - 1][1] += 1; 
    }; 

    console.log(aux); 
    //updateSnake(); 
    snake.position[snake.position.length - 2] = aux; 
    updatePosition(snake.position); 
}; 

あなたが見ることができるように、問題は、AUXは私がそれに何もせずに自分自身を変えているということです。最初のconsole.logの値は2番目の値と異なります!私はプロトタイプを変えているようではありません。

あなたは私を助けることができますか?

+2

auxだけではありませんsnake.position [someindex]あなたは変更しますか? – Zackline

+0

まあ、ええ!しかし、事はそうです。私が最初にそのログを記録すると、それは私に印刷されます。[10,12] - snake.position [2]の価値。その後、auxの値が[10,13]に変わります。しかし、私はどこでもそのAUXを変更しません。 snake.position [2]だけが変更されます.Auxは –

+0

ではありません。[最小限で完全であり、検証可能な例](https://stackoverflow.com/help/mcve)を作成してください。 –

答えて

0
if (snake.direction == 'r') { 
    snake.position[snake.position.length - 1][1] += 1; 
} 

上記の行は、配列auxの変更点です。最初のconsole.log()は、上記のコメントに記載されているように[10,12]を返します。その後、ifステートメントは変数の値であるsnake.position[snake.position.length - 1][1]をインクリメントしています。 console.log()を2回目に呼び出すと、変数auxは[10,12+1]と評価されます。これは、予想される結果である[10,13]に相当します。

関連する問題