【完全版】JavaScriptの変数宣言「let」「var」「const」の違いと正しい使い分け

プログラミング

JavaScriptを学び始めると必ず出てくるのが「変数宣言」の壁です。

特に「let」「var」「const」という3つのキーワードは、一見似ているようで実は使い方やルールが大きく異なります。

「どれを使えばいいの?」「何が違うの?」と悩んだ経験がある方も多いのではないでしょうか。

本記事では、それぞれのキーワードの特徴や違い、具体的な使い分け方を分かりやすく整理しました。

さらに初心者がつまずきやすい疑問にも丁寧に回答し、明日から実践できるシンプルなベストプラクティスを紹介します。

この記事を読めば、変数宣言の選び方に迷わなくなり、より安全で読みやすいコードが書けるようになります。

JavaScriptの変数宣言「let」「var」「const」とは?

まずは、JavaScriptで変数を宣言するときに登場する「let」「var」「const」がどんな役割を持つのかを整理しましょう。

これらはすべて「変数を宣言するためのキーワード」ですが、振る舞いや使いどころに違いがあります。

この章では「変数」と「変数宣言」の基本を理解し、次章の違い解説に備えるのがゴールです。

そもそも変数とは何か?

変数とは、プログラムの中でデータを一時的に保存しておくための「箱」のような存在です。

たとえば、ユーザーが入力した名前や計算結果を保存するときに、この箱を使います。

このイメージを押さえておくと、以降の理解がぐっと楽になります。

説明
let fruit = “banana”; 「fruit」という箱に「banana」という文字列を入れる
const TAX = 0.1; 「TAX」という箱に消費税率を入れる。変わらない前提

なぜ変数宣言が必要なのか

プログラムに「これからこの名前の箱を使います」と宣言することで、コンピュータは正しくデータを扱えるようになります。

宣言をせずに変数を使うと、予期せぬ動作やバグの原因になるため注意が必要です。

必ず「宣言」してから値を代入する習慣をつけましょう。

状態 コード例 説明
宣言のみ let name; 空の箱を用意した状態
代入 name = “Taro”; 箱に値を入れる
初期化 let name = “Taro”; 宣言と同時に値を入れる

「let」「var」「const」の違いを整理しよう

ここからは、3つのキーワードの違いを具体的に整理します。

特に「再宣言・再代入の可否」「スコープ(変数の有効範囲)」「ホスティングの挙動」の3点を理解すると、迷わず使い分けられるようになります。

違いを一覧で把握しておくことが、バグを防ぐ第一歩です。

再宣言・再代入の可否

「再宣言」とは同じ名前で変数をもう一度宣言すること、「再代入」とは既存の変数に新しい値を入れ直すことです。

どのキーワードを選ぶかによって、この挙動が変わります。

キーワード 再宣言 再代入
var 可能 可能
let 不可 可能
const 不可 不可

スコープ(有効範囲)の違い

スコープとは「変数を使える範囲」のことです。

これを理解しないと、意図しない場所で値が上書きされるなどのバグが発生します。

キーワード スコープの種類 特徴
var 関数スコープ 関数全体で有効。ブロックの外でも参照できてしまう
let ブロックスコープ 波カッコ{}の中だけで有効
const ブロックスコープ 波カッコ{}の中だけで有効。変更不可

ホスティングの挙動の違い

JavaScriptでは、変数宣言がプログラム実行前にコードの先頭へと「巻き上げ」られる動作があります。

これをホスティングと呼びますが、キーワードごとに挙動が異なります。

キーワード ホスティング後の状態
var 宣言は巻き上げられるが、値は未定義(undefined)
let / const エラー(ReferenceError)になる

具体的な使い分けの基本ルール

「let」「var」「const」の違いを理解したところで、実際にどう使い分ければいいのかを見ていきましょう。

ここでは、迷ったときに役立つ基本ルールを紹介します。

結論から言うと「constを優先し、必要な場合だけletを使う、varは使わない」が黄金ルールです。

constを優先すべき理由

まず考えるべきは「constで宣言できるかどうか」です。

constで宣言すると値の変更ができないため、コードの意図が明確になり、バグを防ぎやすくなります。

不変の値(固定値)を扱うときは必ずconstを使いましょう。

用途
定数(固定値) const TAX_RATE = 0.1;
設定値 const API_URL = “https://example.com/api”;

letを使うべきケース

一方、値を後から変更する必要がある場合はletを使います。

特にループやカウンターのように、値が増減していく場面ではletが活躍します。

用途
ループ処理 for (let i = 0; i < 5; i++) { console.log(i); }
一時的に値を保持 let total = 0;

varが非推奨とされる理由

varは古い書き方で、スコープやホスティングの挙動が直感的ではありません。

意図しない動作につながるリスクが高いため、新しく書くコードでは避けるべきです。

ただし、古い教材や既存コードには頻出するので理解は必須です。

特徴 注意点
関数スコープ ブロック外からアクセスできてしまう
ホスティング undefinedが入るためバグの原因になりやすい

よくある疑問とその答え

実際にコードを書いていると、細かい疑問が出てきますよね。

ここでは初心者が特に悩みやすい質問をまとめて解説します。

疑問を一つひとつ解消しておくと、安心して変数宣言を選べるようになります。

変数は宣言しなくても使える?

技術的には可能ですが、宣言しない変数は自動的にグローバル変数として扱われます。

これにより予期せぬ影響が出るため、必ず宣言してから使いましょう。

書き方 結果
value = 10; グローバル変数として扱われる(危険)
let value = 10; ローカル変数として安全に扱える

letは避けるべきなの?

いいえ、そんなことはありません。

letは値を変更する必要がある場面で積極的に使うべきです。

ただし「変更不要な変数」にまで使うと意図が不明確になるので、その場合はconstを選びましょう。

ケース 推奨されるキーワード
固定値 const
カウンター let

varは本当に使わなくていいの?

新規コードでは使う必要はありません。

ただし、古いライブラリや教材ではvarで書かれていることが多いため、読めるように理解しておく必要はあります。

「書く」ためではなく「読む」ために知識を残しておくのがポイントです。

場面 対応
新規開発 varは使わず、let/constを選ぶ
古いコードの改修 varの挙動を理解した上で修正に対応する

まとめ|変数宣言のベストプラクティス

ここまで「let」「var」「const」の違いや使い分け方を解説してきました。

最後に重要なポイントを整理し、明日から実践できる形にまとめましょう。

シンプルなルールを守るだけで、変数宣言の迷いはほとんど解消できます。

この記事で紹介したポイントの総復習

まずはおさらいとして、3つのキーワードの特徴をもう一度まとめておきます。

キーワード 再宣言 再代入 スコープ 推奨度
var 可能 可能 関数スコープ 非推奨
let 不可 可能 ブロックスコープ 条件付きで使用
const 不可 不可 ブロックスコープ 最優先

基本方針:「const」を第一候補にし、必要なときだけ「let」を使う。

明日から実践できる変数宣言のルール

具体的なルールを3つに絞ると、とてもシンプルです。

  • const … 値が変わらない変数(固定値、設定値)に使う
  • let … 値が変化する可能性のある変数に使う
  • var … 新しいコードでは使わない(古いコードを読むために理解だけ残す)

このルールを意識するだけで、コードの可読性が向上し、バグの発生率も大幅に減らせます。

特に「なんとなくletを使っている」という状態から脱却することが大切です。

シーン 適切な選択
定数を定義 const
ループカウンター let
古い教材の学習 var(理解用)
タイトルとURLをコピーしました