TOP /JavaScript 変数のスコープ

よくある疑問に変数はvarで宣言した方が良いのか?しなくても良いのか?
グローバル変数とローカル変数

<script language="JavaScript"><!--
var abc=123;

function func1(){
   alert(abc);
}
function func2(){
var abc=321;
   alert(abc);
}
function func3(){
abc=12345;
   alert(abc);
}
function func4(){

   alert(abc);
   if(!abc){
      var abc=54321;
   }
}
// --></script>
初めに変数abcを明示的(varで宣言)に宣言
アラートで変数を確認
次に関数内で変数abcを明示的(varで宣言)に宣言
func2()を実行後func1()で変数abcを確認
次に関数内で変数abcをvarで宣言しない
func3()を実行後func1()で変数abcを確認

関数内で明示的に宣言された変数はローカル変数として作成され関数の実行完了と同時に破棄されます
グローバル変数とローカル変数は同じ名前でも別の変数として扱われます。

次にfunc4()のように関数内のどこかで明示的に変数が宣言されている場合
初めに明示的に宣言された変数を検索します。
しかし値が代入されるのはその行が実行された時なので変数abcの値は未定義になります。