javascriptの基本その2(グローバル変数)

引き続き、この本で勉強。まるごとJavaScript & Ajax ! Vol.1
これまた大事な事だが、知らんかった。一時変数の扱いについて。

{
  var tmp = 0;
  for(var i=0; i<=10; i++) tmp += i;
  alert(tmp);
}

alert(tmp);

javaとかやってると、中括弧でくくられた内部はローカル変数扱いになるから、このプログラムはエラーになるんだろうと思いきや。。
javascriptではエラーにならない。javascriptの場合、関数単位でローカル変数になるそうな。ちなみにiもグローバル変数です。
よって、以下のように記述するとアラート文はエラーになるのだ。

new function(){
  var tmp = 0;
  for(var i=0; i<=10; i++) tmp += i;
  alert(tmp);
}

alert(tmp);

気をつけないとtmpがグローバル変数扱いになってしまい、予期せぬ動きを引き起こす可能性あり。うーむ、しかしちょっと分かりにくいな。