JS

スコープ

初級

読み方:スコープ|英語:Scope

変数が使える範囲のことで、関数の中で宣言した変数は外からは使えないよ。

やさしい説明

スコープとは、変数が使える範囲のことです。変数は宣言した場所によって「見える範囲」が決まります。

教室に例えると、教室の中で決めたルールは教室の外では通用しませんよね。スコープも同じで、関数の中で作った変数は関数の外からは見えません。

グローバルスコープ(どこからでもアクセス可能)、関数スコープ(関数の中だけ)、ブロックスコープ(if文やfor文の中だけ)の3種類があります。

図解:スコープの範囲

グローバルスコープ、関数スコープ、ブロックスコープの入れ子構造

具体例・使い方

const global = "どこでも使える";

function myFunc() {
  const local = "関数の中だけ";
  console.log(global); // ✅ OK
  console.log(local);  // ✅ OK
}

console.log(global); // ✅ OK
console.log(local);  // ❌ エラー!関数の外からは見えない

3種類のスコープ

種類 使える範囲 作られる場所
グローバルスコープどこからでも一番外側(関数の外)
関数スコープその関数の中だけfunction の
ブロックスコープその の中だけif文・for文の

いつ使う?

変数を宣言するときは常にスコープを意識します。不要にグローバル変数を作らず、必要な範囲だけで使える変数にするのが良い書き方です。

「変数はできるだけ狭いスコープで」が鉄則。グローバル変数を増やすと、別の場所で同じ名前を使ったときに上書きされて予期しないバグになります。基本は const/let で必要な範囲だけに閉じ込めましょう。

間違いやすいポイント

❌ varはブロックスコープを持たない

var は関数スコープしか持たず、if文やfor文の から「漏れて」しまいます。新しいコードでは const/let を使いましょう。

// ❌ varはifの外でも使えてしまう
if (true) { var x = 10; }
console.log(x); // 10(漏れている!)

// ✅ letならブロック内に閉じ込められる
if (true) { let y = 10; }
console.log(y); // エラー(安全)

❌ 内側から外の変数は見えるが、外から内側は見えない

スコープは「外→内」は見えますが「内→外」は見えません。関数の中で作った変数を関数の外で使おうとすると ReferenceError になります。

よくある疑問

Q: varとlet/constのスコープの違いは?

A: varは関数スコープ(関数内どこでも使える)、let/constはブロックスコープ({}内だけ)です。let/constを使いましょう。

Q: グローバルスコープとは?

A: どこからでもアクセスできる最も外側のスコープです。グローバル変数は名前衝突のリスクがあるので、なるべく使わないようにしましょう。

Q: スコープ外の変数にアクセスするとどうなる?

A: ReferenceError: x is not defined というエラーが出ます。変数の宣言位置とアクセス位置のスコープを確認しましょう。

関連用語

  • 変数 — スコープは「変数が使える範囲」を決める
  • 定数 — const もスコープのルールに従う
  • 関数 — 関数の中は独立したスコープになる

📖 関連レッスン

レッスンを見る →

関連ブログ記事

⚠️ 関連するエラー

❓ 関連するQ&A