カテゴリ: JavaScript 更新日: 2025/07/02

JavaScriptのスコープとは?ローカル変数・グローバル変数の違いと使い分け

JavaScriptのスコープとは?ローカル変数・グローバル変数の違いと使い分け
JavaScriptのスコープとは?ローカル変数・グローバル変数の違いと使い分け

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

生徒

「JavaScriptで変数を作ってみたんですが、場所によって動かないことがあります。なんでですか?」

先生

「それは『スコープ』という仕組みに関係しています。スコープとは、変数が使える範囲のことなんです。」

生徒

「変数が使える範囲?それってどういうことですか?」

先生

「よし、それではJavaScriptのスコープについて、やさしく説明していきましょう!」

1. JavaScriptのスコープとは?

1. JavaScriptのスコープとは?
1. JavaScriptのスコープとは?

JavaScriptのスコープとは、「変数が使える範囲」のことです。スコープを理解することで、変数の値が予期せず変わってしまったり、動かなくなったりするエラーを防ぐことができます。

スコープには大きく分けて次の2種類があります。

  • グローバルスコープ(プログラム全体で使える)
  • ローカルスコープ(ある場所だけで使える)

2. グローバル変数とは?

2. グローバル変数とは?
2. グローバル変数とは?

グローバル変数とは、プログラムのどこからでも使える変数のことです。関数の外側で変数を作ると、それはグローバル変数になります。


let message = "こんにちは";

function greet() {
  console.log(message);
}

greet(); // こんにちはと表示される

この例では、messageという変数は関数の外にあるので、関数の中からでも使うことができます。

3. ローカル変数とは?

3. ローカル変数とは?
3. ローカル変数とは?

ローカル変数とは、ある特定の場所(関数やブロックなど)だけで使える変数です。関数の中で作られた変数は、その関数の中だけで使えます。


function greet() {
  let message = "こんにちは";
  console.log(message);
}

greet();

console.log(message); // エラーになる

このコードでは、messageは関数の中だけで使えるローカル変数なので、関数の外で使おうとするとエラーになります。

4. ブロックスコープも覚えよう

4. ブロックスコープも覚えよう
4. ブロックスコープも覚えよう

関数以外にも、if文やfor文などのブロック(波かっこ { } で囲まれた部分)でも、変数をローカルにすることができます。これをブロックスコープといいます。


if (true) {
  let color = "青";
  console.log(color); // 青と表示される
}

console.log(color); // エラーになる

letconstで作った変数は、そのブロックの中でしか使えません。これがブロックスコープの特徴です。

5. varとの違いに注意しよう

5. varとの違いに注意しよう
5. varとの違いに注意しよう

JavaScriptでは、letconstの他にvarというキーワードもあります。varで作った変数は、ブロックスコープが効かず、関数単位のスコープになります。


if (true) {
  var color = "赤";
}
console.log(color); // 赤と表示される

このように、varはブロックの外でも使えてしまうので、思わぬバグの原因になります。現在では、基本的にletconstを使うのが主流です。

6. グローバル変数はなるべく使わない

6. グローバル変数はなるべく使わない
6. グローバル変数はなるべく使わない

グローバル変数は便利に見えますが、プログラムが大きくなると「どこで変えられたのか分からなくなる」ことがあります。そのため、なるべく関数の中だけで使うローカル変数を使うようにしましょう。

もし複数の関数で同じ値を使いたい場合は、引数(関数に渡す値)として受け渡すのが安全です。

7. スコープの例:お弁当箱に例えてみよう

7. スコープの例:お弁当箱に例えてみよう
7. スコープの例:お弁当箱に例えてみよう

スコープをお弁当箱にたとえると分かりやすいです。

  • ローカル変数 = 自分のお弁当箱の中に入っているおかず(他の人は食べられない)
  • グローバル変数 = みんなで食べるお弁当(誰でも取れるけど、誰が食べたか分からなくなる)

つまり、なるべく自分の弁当箱の中だけでやりくりしたほうが安全ということです。

8. スコープチェーンとは?

8. スコープチェーンとは?
8. スコープチェーンとは?

JavaScriptでは、ローカル変数が見つからないと、ひとつ外側のスコープを順に探していきます。これをスコープチェーンといいます。


let greeting = "こんにちは";

function sayHello() {
  console.log(greeting);
}

sayHello(); // こんにちはと表示される

sayHello関数の中にはgreetingがありませんが、外側にあるグローバル変数のgreetingを見つけて表示します。

関連記事:
カテゴリの一覧へ
新着記事
New1
TypeScript
TypeScriptのモジュール分離と単一責任原則(SRP)に基づく設計を初心者向けに徹底解説
New2
JavaScript
JavaScriptの正規表現を文字列に動的に組み込む方法(RegExpコンストラクタ)
New3
TypeScript
TypeScriptでグローバル名前空間の汚染を避ける設計方法!モジュール設計の基本
New4
JavaScript
JavaScriptの正規表現をデバッグするツールの使い方
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptの正規表現をデバッグするツールの使い方
No.3
Java&Spring記事人気No3
JavaScript
JavaScriptの正規表現を使ったバリデーション例まとめ
No.4
Java&Spring記事人気No4
JavaScript
JavaScriptの正規表現で繰り返し指定(* + ? {n,m})を学ぼう
No.5
Java&Spring記事人気No5
JavaScript
JavaScriptの正規表現で否定のパターンを表す方法を学ぼう
No.6
Java&Spring記事人気No6
JavaScript
JavaScriptプログラムの実行方法まとめ!ブラウザ・Node.js・コンソールの使い方
No.7
Java&Spring記事人気No7
JavaScript
JavaScriptの正規表現でlookahead・lookbehindを使う応用例
No.8
Java&Spring記事人気No8
JavaScript
JavaScriptの正規表現のよくあるエラーとその対処法