'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つとしてJavaScriptJScriptなどがある」って理解すればいいハズで、ここでわざわざ「など」って入れたのは、ほかの実装で別の名前が使われるコトもあるからなのだ。
そのECMAScriptの仕様書を読んでて気付いたんだけど、変数のスコープ(可視範囲)をつくるのは関数のブロックだけだそうだ。例えばこんな感じ。

if (mynamespace == undefined) {
  // mynamespace は大域変数となる。
  var mynamespace = {};
}

// mynamespace は未定義ではない。
mynamespace.MyClass = function() {
  // x はこの関数の局所変数となる。
  var x = 0;
};

// x は未定義となる。
document.write (x);

この数年間、ずっとカン違いしてた…。初めて読んだ参考書が間違ってて、それをずっと信じちゃってたのがとってもハズかしい。

*1:わたしはジャニーズ事務所がキライだったりするが、所属タレントにひいきな友だちがけっこういたりするので、今回はちょこっとだけ丁寧に書いてみた。

*2:調べたら原知宏さん…じゃなくて岡田准一さんでした。ゴメンナサイ。

*3:名前を出すのもおぞましいので、わかる人にはわかる程度に伏せといた。でも、恋愛すると退学になるってのは、それはそれで革命といえるかもしれないね。