javascriptのスコープ

javascriptのスコープの弾さんの解説(まぁ、それメインの話ではないけど)で

JavaScriptはまた特殊でして、var宣言された変数はlexical scopeの内側からは見えません。

とあったので、へぇ、そうなのかと思って試してみた。


var foo = 1;
hoge = 10;
(function(){
alert(foo); // undefined
alert(hoge);// 10
var foo = 2;
hoge = 20;
alert(foo); // 2
alert(hoge);//20
})();
alert(foo); // 1
確かに、varをつけると見えない様子。
でも、

(function(){
alert(window.foo); // 1
})();
とすると見えた。まぁ、それだけの話。
[追記]
弾さんの様に、<pre ondblclick="eval(this.innerHTML)">
</pre>の中にソースを書くとwindow.fooでは取れなかった。これって、scriptタグの中身がwindowオブジェクトのプロパティになるって事かな?でも、会社では殆ど同じソースでちょっと挙動が違ったしなぁ。よく解らない。