5

以下のようにJavascriptで複数の変数を宣言しても大丈夫ですか?

var foo = bar = "Some value";
4

1 に答える 1

5

グローバル変数を作成していることに気付いていない限り (これはほとんど悪い習慣と考えられています)、それは問題です。

Java のような言語から来た場合は、次のようなことをするのが自然です。

int foo = bar = 0;

変数foobarは両方とも、現在のスコープ内で値 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;
于 2015-09-14T14:13:08.130 に答える