うえー、何でこのコード動くんだろー

変数のスコープとか環境とかの話。以下のコードが動くのが気持ち悪い。

> hoge <- "hogehoge"
> (function(){cat(hoge,fill=T)})()
hogehoge

ずっと今までこういうコードは動かない、というか動いて欲しくないと思っていたので、これが動くのを初めて知ったと同時に気持ち悪さ全開になりました。

えー、だって上の例とかだと、普通hogeを引数として与えるし、javaとかrubyだとこういうコード動かないし。それに同じ変数名が出てきたら、環境の変数か、関数内のみの変数かでこんがらかって、バグの温床とかになりそうな気がするじゃないですか(しったかぶり)。

「そういう仕様です」、ということで納得すればいいんだろうけど、何かしらのメリットがあるんじゃないかとか考えてしまいますよねー。えー、これができると何がうれしいわけなんだろ。。。

追記
CとかC++だと触れるらしい。Rubyもなんかやれば触れるらしい。えー、一体何のメリットがあるっていうんだー。

追追記
言語によって、色々違うらしく朝のtwitterで話題になってしまったwww。触れないようになっている言語のほうが珍しいんだろうか?phpとかも触れないらしい。javaはそもそもグローバル変数ないんでしたっけか?