var宣言の巻き上げ(hoisting)
JavaScript では関数内部のどこにでもvar文を書くことができますが、これらの変数はその関数の先頭で宣言されたものと同じように動作します。
以下のコードは、1つ目の alert で"undefubed"が表示され、次に"local"が表示されます。
myname = "global"; function func() { alert(myname); var myname = "local"; alert(myname); } func();
このコードは以下の実装と同じような振舞をすることになります。
myname = "global"; function func() { var myname; alert(myname); myname = "local"; alert(myname); } func();
単独varパターン
前述の巻き上げによる誤りを防ぐために、var宣言は関数の先頭でまとめて行うべきです。関数の先頭でvar文を一つにまとめるパターンを単独varパターンといいます。
function func() { var a = 1, b = 2, sum = a + b, myobject = {}, i; ・・・ }
関数内のvar宣言箇所は全て単独varパターンにしたがうのが良いでしょう。
ちなみに以下の宣言は、
var a = b = 0;
実際には以下の意味であり
var a = (b = 0);
b がグローバルとなってしまうので必ずカンマで区切るようにしてください。