すがブロ

sugamasaoのhatenablogだよ

いまさらだけど JavaScript の基礎なんだよ!

いまさらだけど JavaScript

わかりやすく説明してるブログとか結構あるんで、そこらへんを見るとJSがわかったような気がしてしまうんだけど、実際のところ自分の中に落とし込めないんで基礎からちゃんとやる。
キバヤシ口調で。

JSのグローバル変数は window オブジェクトが所持してるんだよ!

何か変数を使用するときは以下のようにする*1

var a = 100;

または、以下のように。

a = 100;

こんな感じで宣言したあとで、

alret(window.a)

こうすると 100 が表示される。
FireBugの人はコンソールで試してみるといいよ。IEの人はアドレスバーに↓みたいな感じで入力してみよう。

javascript:var a = 100; alert(window.a);

関数も同じノリで動かせる。

function func() {
  alert('function')
}

とか、

var func = function() {
  alert('function')
}

上記のように宣言しておいて、↓のように実行できる。

  window.func();

IEの人は例の如くアドレスバーに↓みたいな感じで入力してみよう。

javascript:var func = function(){alert('function')}; window.func();

つまり、グローバル変数っていうのは window オブジェクトの掌で遊んでいる存在なんだよ!*2

ところで window ってなんなの

window は 一番トップレベルのオブジェクト。alert とか confirm メソッドは window オブジェクトが持ってるメソッドなんだよ!
それ以上のことはよくわかんね(´Д`)

window がオブジェクトということは

さっき書いたグローバルな変数とか関数っていうのは、 window オブジェクトのプロパティ/メソッドとして宣言しているということなんだよ!
だから

window.a = 100;
alert(window.a);

とか

window.func = function(){
  alert('function')
}
window.func();

とやっても同等なんだよ!*3
つまり、グローバルっつっても変数や関数自身がトップレベルにあるのではなくて、 window っていうでっかいオブジェクト(受け皿)があるっていう話なんだよ!(ナンダッテー)

というわけで

勢いだけで書いた! 勢いだ... - キバヤシ断言 - はてなセリフ
間違ってたらごめんなんだよ!><

*1:関数の中でやっちゃだめなんだよ!

*2:思い出したようにキバヤシ口調

*3:た、たぶん……