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

まとめ: 変数宣言は関数の最初に行う

変数宣言は関数の最初にまとめて行うのがよさそうです。