JavaScript で忘れがちな変数宣言に関してのメモ。
変数の宣言
変数宣言は関数のどこでしても関数の先頭から有効
変数を宣言せずに使用すると “変数” is not defined と怒られます。
alert(hoge);
// => hoge is not defined
使用する場所よりも後で宣言していると undefined となります。
宣言はされていても、初期化されていないということです。
alert(hoge); var hoge = "Hello World"; // => undefined
宣言は関数のどこでしても有効になるが、初期化や代入は宣言順になります。
変数宣言は同一関数内のすべての場所で有効
if 文や for ループの中で変数を宣言しても、やっぱり関数の先頭で宣言したこととになります。
if 文で条件が一致しない場合の方で宣言していても有効になる。(undefined なのは宣言はされているが初期化されていないからです。)
alert(hoge); if (0) { var hoge = "Hello World"; } // => undefined
関数がネストされているところで宣言されるのはだめ
関数の中で関数を宣言して、そこで変数を宣言してもダメ。同一の関数内でのみ変数宣言は有効になります。
(function() { alert(hoge); (function() { var hoge = "Hello World"; })(); })(); // => hoge is not defined
まとめ: 変数宣言は関数の最初に行う
変数宣言は関数の最初にまとめて行うのがよさそうです。