JavaScriptの変数スコープがJavaと結構違って厄介。。
また、備忘録として!
まず、JavaScriptにはブロックレベルのスコープがありません。つまり、ある関数で宣言された変数は、どのブロックで宣言されたにかかわらず関数全体で有効になる。
言葉ではわかりにくいと思うので早速コードで確認!
var scope = "global"; function f() { alert(scope); var scope = "local"; alert(scope); } f();
最初のalertは、「global」と表示されると思いませんか?(JavaとかC使いの人に向けての問いかけ)
上で説明したように関数で宣言した変数は関数全体で有効なので「undefined」と表示されるのです。
もちろん2回目のalertは、「local」と表示されます。
つまり、次のように書いたのと同じ意味になります。
function f() { var scope; alert(scope); var scope = "local"; alert(scope); } f();
変数が後に宣言してあること認識してるなら初期化してくれればいいのにな〜って思った今日この頃。
ま、そうしちゃうとどこで変数宣言したかわからないから探すの大変になっちゃいますけど。。。
言いたいことは、ちゃんと頭で変数宣言したほうがよいよってこと!