JS

スコープ

初級

読み方:スコープ|英語: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 というエラーが出ます。変数の宣言位置とアクセス位置のスコープを確認しましょう。

関連用語

📖 関連レッスン

レッスンを見る →

関連ブログ記事

⚠️ 関連するエラー

❓ 関連するQ&A