Panda Noir

JavaScript の限界を究めるブログです。

varを使ってるつもりが変数がグローバル変数になるケース

varを使っているのにグローバル変数として宣言されているケースがあります。

次に示すケースではaはローカル変数、bはグローバル変数となります。

var a = b = 3;

このトリックは演算子の評価順番にあります。 上のコードでははじめに b = 3 が評価され、次に a = 3 が評価されます(b = 3は評価すると3を返すので上のようになります)。ここで重要なのはb = 3が先に評価されてしまうことです。先に評価されるのでvarが掛かるのがaのみとなってしまい、bがグローバル変数となります。こういうトリックです。

上記のコードを意図した通りaもbもローカル変数にするには次のようにしなければなりません。

var a = 3, b = 3;

// もしくは

var a, b; a = b = 3;

初めに示したコードもきちんと動きそうだと思ってしまいがちです。初見だと案外気がつけないので気をつけましょう。