Skip to content

4.5 変数スコープと関数

変数には、それがどこから参照可能かを決定する スコープ(scope) という概念があります。適切にスコープを管理することで、変数の名前衝突を防ぎ、プログラムの見通しを良くすることができます。

変数は、宣言された場所によって属するスコープが決まり、そのスコープの外側からは参照することができません。

  • 有効範囲: スコープ内で定義された変数は、その中(およびさらに内側のスコープ)でのみ有効です。
  • 名前の再利用: 異なるスコープであれば、同じ名前の変数を定義しても衝突しません。
  • 隠蔽(シャドウイング): 外側と内側のスコープに同じ名前の変数がある場合、内側では内側の変数が優先されます。

4.5.2 ブロックスコープと関数スコープ

Section titled “4.5.2 ブロックスコープと関数スコープ”

現代のTypeScript(constlet を使用する場合)では、主に ブロックスコープ が適用されます。

  • ブロックスコープ: 波括弧 { } で囲まれた範囲が一つのスコープとなります。if 文や for 文のブロック、あるいは関数そのものの本体などがこれに該当します。
  • 関数スコープ: 関数全体で有効なスコープです。関数の引数は、その関数の本体全体をスコープとする変数として扱われます。

かつての JavaScript で使われていた var は、ブロックスコープを無視して 関数スコープ に属するという特殊な挙動をします。

  • ブロック(iffor)の中で宣言しても、その外側から参照できてしまいます。
  • 予期せぬバグの原因となるため、現代の開発では var の使用は避け、常に const または let を使うべきです。