スコープ
初級読み方:スコープ|英語:Scope
変数が使える範囲のことで、関数の中で宣言した変数は外からは使えないよ。いつ使う? 意識しなくても常に関係する概念だよ。「変数が見つからない」エラーが出たとき、スコープを理解していると原因がわかるよ。間違いやすいポイント: if文やfor文の{}の中でletで宣言した変数は、{}の外では使えないよ(ブロックスコープ)。外で使いたいなら{}の前で宣言しよう。
やさしい説明
スコープとは、変数が使える範囲のことです。変数は宣言した場所によって「見える範囲」が決まります。
教室に例えると、教室の中で決めたルールは教室の外では通用しませんよね。スコープも同じで、関数の中で作った変数は関数の外からは見えません。
グローバルスコープ(どこからでもアクセス可能)、関数スコープ(関数の中だけ)、ブロックスコープ(if文やfor文の中だけ)の3種類があります。
図解:スコープの範囲
具体例・使い方
const global = "どこでも使える";
function myFunc() {
const local = "関数の中だけ";
console.log(global); // ✅ OK
console.log(local); // ✅ OK
}
console.log(global); // ✅ OK
console.log(local); // ❌ エラー!関数の外からは見えない いつ使う?
変数を宣言するときは常にスコープを意識します。不要にグローバル変数を作らず、必要な範囲だけで使える変数にするのが良い書き方です。
間違いやすいポイント
❌ varはブロックスコープを持たない
// ❌ varはifの外でも使えてしまう
if (true) { var x = 10; }
console.log(x); // 10(漏れている!)
// ✅ letならブロック内に閉じ込められる
if (true) { let y = 10; }
console.log(y); // エラー(安全) よくある疑問
Q: varとlet/constのスコープの違いは?
A: varは関数スコープ(関数内どこでも使える)、let/constはブロックスコープ({}内だけ)です。let/constを使いましょう。
Q: グローバルスコープとは?
A: どこからでもアクセスできる最も外側のスコープです。グローバル変数は名前衝突のリスクがあるので、なるべく使わないようにしましょう。
Q: スコープ外の変数にアクセスするとどうなる?
A: ReferenceError: x is not defined というエラーが出ます。変数の宣言位置とアクセス位置のスコープを確認しましょう。
関連用語
📖 関連レッスン
レッスンを見る →