4.5 変数スコープと関数
変数には、それがどこから参照可能かを決定する スコープ(scope) という概念があります。適切にスコープを管理することで、変数の名前衝突を防ぎ、プログラムの見通しを良くすることができます。
4.5.1 変数のスコープとは
Section titled “4.5.1 変数のスコープとは”変数は、宣言された場所によって属するスコープが決まり、そのスコープの外側からは参照することができません。
- 有効範囲: スコープ内で定義された変数は、その中(およびさらに内側のスコープ)でのみ有効です。
- 名前の再利用: 異なるスコープであれば、同じ名前の変数を定義しても衝突しません。
- 隠蔽(シャドウイング): 外側と内側のスコープに同じ名前の変数がある場合、内側では内側の変数が優先されます。
4.5.2 ブロックスコープと関数スコープ
Section titled “4.5.2 ブロックスコープと関数スコープ”現代のTypeScript(const や let を使用する場合)では、主に ブロックスコープ が適用されます。
- ブロックスコープ: 波括弧
{ }で囲まれた範囲が一つのスコープとなります。if文やfor文のブロック、あるいは関数そのものの本体などがこれに該当します。 - 関数スコープ: 関数全体で有効なスコープです。関数の引数は、その関数の本体全体をスコープとする変数として扱われます。
コラム20 var による変数の宣言
Section titled “コラム20 var による変数の宣言”かつての JavaScript で使われていた var は、ブロックスコープを無視して 関数スコープ に属するという特殊な挙動をします。
- ブロック(
ifやfor)の中で宣言しても、その外側から参照できてしまいます。 - 予期せぬバグの原因となるため、現代の開発では
varの使用は避け、常にconstまたはletを使うべきです。