【すこーぷ】

スコープ とは?

公開:
💡 変数が「見える範囲」を決める境界線
📌 このページのポイント
グローバルスコープ 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」 = 範囲・視野
💬 望遠鏡の「スコープ(見える範囲)」と同じ語源。変数が「見える範囲」というイメージで覚えやすい
← 用語集にもどる