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