以下のようにJavascriptで複数の変数を宣言しても大丈夫ですか?
var foo = bar = "Some value";
以下のようにJavascriptで複数の変数を宣言しても大丈夫ですか?
var foo = bar = "Some value";
グローバル変数を作成していることに気付いていない限り (これはほとんど悪い習慣と考えられています)、それは問題です。
Java のような言語から来た場合は、次のようなことをするのが自然です。
int foo = bar = 0;
変数fooとbarは両方とも、現在のスコープ内で値 0 で初期化されます。しかしJavascriptでは:
var foo = bar = 0;
現在のスコープ内に変数fooとグローバル変数barを作成します。
自分の間違いを理解する前に、書いているゲームを約 1 時間デバッグしていました。次のようなコードがありました:
function Player() {
var posX = posY = 0;
}
function Bullet() {
var posX = posY = 0;
}
var player = new Player;
var bullet = new Bullet;
変数posYはグローバルです。posYの値を変更する 1 つのオブジェクトのメソッドは、他のオブジェクトの値も変更します。
何が起こったのか: bulletオブジェクトが画面を垂直方向に移動するたびに(それ自体のposYを変更する)、プレイヤーオブジェクトはbulletの Y 座標にテレポートされます。
変数宣言を次のように分離するだけで解決します。
var posX = 0;
var posY = 0;