【すこーぷ】
スコープ とは?
💡 変数が「見える範囲」を決める境界線
📌 このページのポイント
- ローカルスコープ(関数・ブロック内)とグローバルスコープ(どこからでも見える)がある
- 同じ名前の変数が内側と外側にある場合、内側の変数が優先される(シャドーイング)
- スコープが小さいほど、変数の影響範囲が限定されてバグが減りやすい
- JavaScriptではvarは関数スコープ、let/constはブロックスコープを持つ
スコープって何で必要なの?
変数の有効範囲を区切らないと、どこからでも変数を変えられてしまうんだ。関数Aで使う「i」と関数Bで使う「i」が衝突しないのも、スコープがあるおかげだよ。
グローバル変数って全部から見えるんだよね?
そう。だからグローバル変数を多く使うと、どこで値が変わったか追いにくくなる。大きなプログラムほど「なるべく小さいスコープに閉じ込める」がベストプラクティスとされているよ。
シャドーイングって何?
内側のスコープで同じ名前の変数を宣言すると、外側の変数が「影に隠れる」現象だよ。内側のコードは内側の変数だけを見て、外側の変数は見えなくなる。意図的に使うこともあるけど、うっかりやると混乱するから注意。
varとletのスコープの違いがよくわからない
varは関数の中全体が有効範囲。ifやforのブロックを抜けても生き残る。letはブロック単位だからifの中で宣言したらif外では消える。さらにvarには「巻き上げ(ホイスティング)」があって、宣言前でも変数が存在しているように振る舞う。これがバグの温床になりやすいから、モダンなJSではlet/constを使うのが常識になってる。
まとめ:ざっくりこれだけ覚えればOK!
スコープって出てきたら「変数が使える範囲」と思えばだいたいOK!
📖 おまけ:英語の意味
「Scope」 = 範囲・視野
💬 望遠鏡の「スコープ(見える範囲)」と同じ語源。変数が「見える範囲」というイメージで覚えやすい