【すこーぷ】

スコープ とは?

💡 変数が「見える範囲」を決める境界線
📌 このページのポイント
グローバルスコープ var globalVar = "全体" 関数スコープ(function) var funcVar = "関数内" ブロックスコープ(if / for) let blockVar = "ブロック内" アクセス可 不可 globalVar funcVar blockVar blockVar funcVar blockVar
スコープの仕組み
ひよこ ひよこ

スコープって何で必要なの?

ペンギン先生 ペンギン先生

変数の有効範囲を区切らないと、どこからでも変数を変えられてしまうんだ。関数Aで使う「i」と関数Bで使う「i」が衝突しないのも、スコープがあるおかげだよ。

ひよこ ひよこ

グローバル変数って全部から見えるんだよね?

ペンギン先生 ペンギン先生

そう。だからグローバル変数を多く使うと、どこで値が変わったか追いにくくなる。大きなプログラムほど「なるべく小さいスコープに閉じ込める」がベストプラクティスとされているよ。

ひよこ ひよこ

シャドーイングって何?

ペンギン先生 ペンギン先生

内側のスコープで同じ名前の変数を宣言すると、外側の変数が「影に隠れる」現象だよ。内側のコードは内側の変数だけを見て、外側の変数は見えなくなる。意図的に使うこともあるけど、うっかりやると混乱するから注意。

ひよこ ひよこ

varとletのスコープの違いがよくわからない

ペンギン先生 ペンギン先生

varは関数の中全体が有効範囲。ifやforのブロックを抜けても生き残る。letはブロック単位だからifの中で宣言したらif外では消える。さらにvarには「巻き上げ(ホイスティング)」があって、宣言前でも変数が存在しているように振る舞う。これがバグの温床になりやすいから、モダンなJSではlet/constを使うのが常識になってる。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
スコープって出てきたら「変数が使える範囲」と思えばだいたいOK!
📖 おまけ:英語の意味
「Scope」 = 範囲・視野
💬 望遠鏡の「スコープ(見える範囲)」と同じ語源。変数が「見える範囲」というイメージで覚えやすい
← 用語集にもどる