カテゴリ: JavaScript 更新日: 2026/04/27

JavaScriptのグローバルスコープとローカルスコープを初心者向けにわかりやすく解説!

JavaScriptのグローバルスコープ・ローカルスコープを比較しよう
JavaScriptのグローバルスコープ・ローカルスコープを比較しよう

先生と生徒の会話形式で理解しよう

生徒

「先生、JavaScriptで変数をどこで使えるかってどうやって決まるんですか?」

先生

「それはスコープという仕組みで決まります。スコープとは、変数や関数がアクセスできる範囲のことです。」

生徒

「スコープには種類があるんですか?」

先生

「はい、代表的なのはグローバルスコープとローカルスコープです。それぞれどう違うか見ていきましょう。」

1. グローバルスコープとは何か?

1. グローバルスコープとは何か?
1. グローバルスコープとは何か?

グローバルスコープとは、プログラム全体でアクセスできる変数や関数の範囲のことです。つまり、一度宣言すれば、どこからでも使うことができます。グローバルスコープの変数は便利ですが、たくさん使うと予期せぬバグの原因になることがあります。


let globalVar = "私はグローバル変数です";

function showGlobal() {
  console.log(globalVar);
}

showGlobal(); // 実行結果: 私はグローバル変数です
console.log(globalVar); // 実行結果: 私はグローバル変数です

2. ローカルスコープとは何か?

2. ローカルスコープとは何か?
2. ローカルスコープとは何か?

ローカルスコープとは、特定の関数やブロック内だけで有効なスコープです。関数の外からはアクセスできません。ローカルスコープを使うと、変数の衝突を避け、プログラムを安全に書くことができます。


function localExample() {
  let localVar = "私はローカル変数です";
  console.log(localVar);
}

localExample(); // 実行結果: 私はローカル変数です
console.log(localVar); // エラー: localVarは定義されていません

3. グローバルスコープとローカルスコープの違いを比較

3. グローバルスコープとローカルスコープの違いを比較
3. グローバルスコープとローカルスコープの違いを比較

簡単にいうと、グローバルスコープは「家全体で使える道具」、ローカルスコープは「自分の部屋だけで使える道具」です。グローバル変数は便利ですが、増えすぎると管理が大変です。ローカル変数は関数の中だけで使うので安全です。


let globalValue = "家全体で使える";

function roomFunction() {
  let localValue = "自分の部屋だけで使える";
  console.log(globalValue); // OK
  console.log(localValue); // OK
}

roomFunction();
console.log(globalValue); // OK
console.log(localValue); // エラー

4. ブロックスコープとは何か?

4. ブロックスコープとは何か?
4. ブロックスコープとは何か?

JavaScriptでは、letconstで宣言した変数はブロック({}で囲まれた部分)内でのみ有効です。これをブロックスコープと呼びます。ブロックスコープを使うことで、関数外のコードと衝突せずに変数を使うことができます。


if (true) {
  let blockVar = "ブロック内だけの変数";
  console.log(blockVar); // OK
}

console.log(blockVar); // エラー

5. varとlet・constのスコープの違い

5. varとlet・constのスコープの違い
5. varとlet・constのスコープの違い

昔のJavaScriptではvarで変数を宣言していました。varは関数スコープでブロックスコープを持たないため、意図しない場所でもアクセスできてしまうことがあります。最近はletconstを使うのが推奨です。


if (true) {
  var oldVar = "私はvarで宣言";
  let newVar = "私はletで宣言";
}

console.log(oldVar); // OK
console.log(newVar); // エラー

6. グローバルスコープを安全に使うコツ

6. グローバルスコープを安全に使うコツ
6. グローバルスコープを安全に使うコツ

グローバルスコープの変数をむやみに増やすとバグの原因になります。安全に使うためには、できるだけローカルスコープやブロックスコープに変数を入れることが大切です。また、名前が衝突しないように、変数名を工夫すると良いでしょう。


let appGlobal = "アプリ全体で使う";

function doSomething() {
  let appLocal = "この関数内だけで使う";
  console.log(appGlobal); // OK
  console.log(appLocal); // OK
}

doSomething();
console.log(appGlobal); // OK
console.log(appLocal); // エラー

7. スコープのまとめと使い分けの考え方

7. スコープのまとめと使い分けの考え方
7. スコープのまとめと使い分けの考え方

まとめると、グローバルスコープは全体で使える変数、ローカルスコープは関数やブロック内でだけ使える変数です。一般的には、ローカルスコープやブロックスコープを多用して、必要最低限だけグローバルスコープを使うと安全で管理しやすいプログラムになります。


let globalVar = "全体で使う";

function calculate() {
  let localVar = "関数内だけ";
  if (true) {
    let blockVar = "ブロック内だけ";
    console.log(globalVar); // OK
    console.log(localVar);  // OK
    console.log(blockVar);  // OK
  }
  console.log(blockVar); // エラー
}

calculate();

まとめ

まとめ
まとめ

今回の記事では、JavaScriptにおけるスコープの基本概念と、グローバルスコープ、ローカルスコープ、ブロックスコープの違いを丁寧に解説しました。JavaScriptのスコープは、変数や関数がどこからアクセスできるかを決める重要な仕組みであり、プログラムの安全性や可読性に大きく影響します。グローバルスコープの変数はプログラム全体からアクセス可能ですが、過剰に使用すると変数名の衝突やバグの原因となります。一方、ローカルスコープは関数内だけで有効で、ブロックスコープは{}で囲まれた範囲内でのみ有効です。最近では、letconstを使った変数宣言が推奨され、varの特性による意図しないスコープの問題を避けることができます。

スコープを正しく理解し、使い分けることで、プログラムの可読性や保守性を高めることができます。グローバル変数を必要最小限に抑え、ローカルスコープやブロックスコープを積極的に活用することが、効率的で安全なJavaScriptプログラムを書くためのポイントです。また、関数やブロックの中で変数を宣言する際には、意味のある名前を付けて、他のコードとの衝突を防ぐ工夫も重要です。

さらに、スコープの理解は非同期処理やクロージャ、モジュール化など、より高度なJavaScriptの概念を理解する上でも不可欠です。例えばクロージャを使う場合、内部関数が外部関数の変数にアクセスできるのは、ローカルスコープとグローバルスコープの違いを理解しているからです。スコープを理解しておくことで、より複雑なプログラムでもバグを防ぎ、効率的に開発を進めることができます。

実際にコードを書く際は、まず関数やブロックの中で変数を定義し、必要に応じてグローバルスコープを利用する方針が安全です。以下はまとめとして、グローバルスコープ、ローカルスコープ、ブロックスコープの使い分けの簡単な例です。

 let globalMessage = "私は全体で使えるグローバル変数です";
function exampleFunction() {
let localMessage = "私はこの関数内だけで有効です";
if (true) {
let blockMessage = "私はブロック内だけで有効です";
console.log(globalMessage); // OK
console.log(localMessage); // OK
console.log(blockMessage); // OK
}
console.log(blockMessage); // エラー
}

exampleFunction();
先生と生徒の振り返り会話

生徒

「先生、結局スコープって覚えておくと何が便利なんですか?」

先生

「スコープを理解することで、どこで変数や関数を安全に使えるかがわかります。グローバル変数を無闇に増やさず、ローカルやブロックで管理できるのでバグを減らせます。」

生徒

「なるほど。letやconstを使えば、変数の範囲もちゃんと守れるんですね。」

先生

「その通りです。さらに、ブロックスコープを活用すると、関数の中でも変数の衝突を防げます。例えばforループやif文の中で変数を限定して使うことができます。」

生徒

「じゃあ、全体で使う変数は最小限にして、あとは関数やブロック内で使うのが良いんですね。」

先生

「そうです。それが安全でわかりやすいコードを書くコツです。スコープを意識すれば、クロージャや非同期処理などもスムーズに理解できます。」

生徒

「分かりました!スコープを使い分けて安全で効率的なJavaScriptを書くようにします。」

カテゴリの一覧へ
新着記事
New1
TypeScript
TypeScriptの関数に型をつける方法(引数・戻り値)を初心者向けに徹底解説!
New2
TypeScript
TypeScriptの始め方:開発環境の構築手順【初心者向け】
New3
TypeScript
TypeScriptでExpressのミドルウェアを型安全に定義する方法!バックエンド開発の初心者向け解説
New4
JavaScript
JavaScriptのfilterメソッドで条件に合う要素を抽出する方法
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptでフォームの値を取得する方法を徹底解説!valueプロパティの使い道
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptでHTML5バリデーションAPIを使いこなす!初心者でもわかるフォーム入力チェック
No.3
Java&Spring記事人気No3
TypeScript
TypeScriptでコメントを書く正しい書き方と使い分け【初心者向けにやさしく解説】
No.4
Java&Spring記事人気No4
TypeScript
TypeScript学習におすすめの無料教材・リファレンスサイト【初心者向け】
No.5
Java&Spring記事人気No5
JavaScript
JavaScriptで要素を削除する方法(removeChild, removeなど)
No.6
Java&Spring記事人気No6
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.7
Java&Spring記事人気No7
JavaScript
JavaScriptの現在日時を取得する方法を完全ガイド!初心者でもわかるDate.now()とnew Date()
No.8
Java&Spring記事人気No8
JavaScript
JavaScriptの配列操作でよくあるエラーとその解決法まとめ