すぐに動かせるJavaScript入門

スコープ

プログラム中での変数の有効範囲のことをその変数のスコープと言います。スコープという観点でみると変数にはグローバル変数とローカル変数の2種類があります。グローバル変数のスコープはプログラム全体で、ローカル変数のスコープはその変数が宣言された関数の中に限られます。関数の仮引数のスコープもその関数の中に限定されます。グローバル変数とローカル変数がバッティングしている場合は、ローカル変数が優先されます。

出力:
エラー:

グローバル変数はvarを省略できますが、ローカル変数の宣言にはvarは必須です。もし関数内でvarをつけ忘れて変数を宣言すると、グローバル変数になるため注意が必要です。プログラムの意味を理解しやすくするために、すべての変数宣言にはvarをつけるスタイルにしておくと混乱することがないでしょう。

JavaScriptのスコープで特筆すべき点として、ブロックレベルのスコープがないことが挙げられます。例えばfor文の初期化部分で宣言した変数は、for文のブロックが終わった後もfor文がある関数内で参照することができます。ある関数で宣言された変数は、どのブロックで宣言されたかに関わらず関数全体で有効となるためです。二番目の例(check2)では、グローバル変数を参照するかと思いきや、未初期化の変数を参照するため、undefinedが表示されます。ローカル変数は関数全体で有効となるため、このような挙動になります。さらに詳しくはオブジェクトの項のスコープチェーンも参照ください

since 2013