'undefined' は娘。またはジャニーズではありません。
今日は久しぶりに「学校へ行こう!」っていうテレビ番組を観た…つもりでいたが、いつのまにか名前が「学校へ行こう! MAX」に変わったらしい。でも今日はいまいちおもしろくなくて、途中で観るのをやめた。この番組にはジャニーズ事務所さんトコのV6のみなさんが出てらっしゃる*1が、話をするときにいちいち「ぶいしっくす」って言うのは長いので、勝手に「ぶいろく」と省略してる。2文字しか減ってないケド、なんとなく「どぶろく」と似てるので密かに気に入ってたりする。V6のオマケでみのもんたさんも出てたりするが、「みのもんた」も「もんた」とか「のりお」って省略してる。でもみんなは「みの」って言ってるらしい。
もんたは1人だからいいケド、V6のみなさんは6人もいるのでちょっと困る。友だちのおかげで自然と覚えたつもりでいたが、いま顔と名前を思い浮かべたら1人だけ出てこなかった*2のは秘密だ。
6人でもちょっと困るくらいなので、組員やその人数がコロコロ変わっちゃう某モーニング娘○*3なんてのははなっから覚える気はない。「モの組員はいま何人いるでしょう?」って問題を出されても「…たぶん20億3,000万人くらい?」と返すのがせいいっぱいで、この答えに「日本人より多いワケないじゃんっ!」てツッコミはあっても、「バルタン星人かよっ!」てのはほとんどなかったりする。でも、あの中に1人くらい地球外生命体が混じってても、不思議はないと思うぞ。
さて。世の中には政治的な理由で名前が変わっちゃうのもあったりして、JavaScriptなんてのもその1つなんだろう。ネットスケープは最初 "LiveScript" って名前にしてたのに、Javaが流行りだしたんで "JavaScript" に変えた。しばらくしてマイクロソフトもJavaScriptの実行環境を提供したけど、 "Java" なんて言葉を入れたくなかったので "JScript" って名前にした。そのうちECMAによって標準化され、これは "ECMAScript" と呼ばれてる。いまでは「ECMAScriptという『仕様』があって、その『実装』の1つとしてJavaScriptやJScriptなどがある」って理解すればいいハズで、ここでわざわざ「など」って入れたのは、ほかの実装で別の名前が使われるコトもあるからなのだ。
そのECMAScriptの仕様書を読んでて気付いたんだけど、変数のスコープ(可視範囲)をつくるのは関数のブロックだけだそうだ。例えばこんな感じ。
if (mynamespace == undefined) { // mynamespace は大域変数となる。 var mynamespace = {}; } // mynamespace は未定義ではない。 mynamespace.MyClass = function() { // x はこの関数の局所変数となる。 var x = 0; }; // x は未定義となる。 document.write (x);
この数年間、ずっとカン違いしてた…。初めて読んだ参考書が間違ってて、それをずっと信じちゃってたのがとってもハズかしい。