JS

var・let・const の違い

初級

読み方:バー・レット・コンスト のちがい|英語:var vs let vs const

JavaScriptで変数を宣言する3つの方法。letとconstが現在の標準で、varは古い書き方。

やさしい説明

varは関数スコープで古い書き方。letはブロックスコープで再代入可能。constはブロックスコープで再代入不可。迷ったらconstを使いましょう。

var は再宣言ができてしまい、バグの原因になりやすいです。let/const はブロック(if文やfor文の中)に閉じ込められるので安全です。

現代のJavaScriptでは「まず const、変更が必要なら let、var は使わない」が基本ルールです。

3つの違いまとめ

キーワード 再代入 再宣言 スコープ
const❌ 不可❌ 不可ブロック
let✅ 可能❌ 不可ブロック
var✅ 可能✅ 可能(危険)関数

具体例・使い方

// const: 再代入不可(一番安全)
const name = "太郎";
name = "花子"; // ❌ エラー

// let: 再代入OK
let score = 80;
score = 90; // ✅ OK

// var: 使わない(バグの原因)
var x = 1;
var x = 2; // 再宣言できてしまう(危険)

スコープの違い(なぜ var は危険か)

// var はブロックの外に漏れる(危険)
if (true) {
  var leaky = "外に出る";
  let safe = "ブロック内だけ";
}
console.log(leaky); // "外に出る"(意図しない漏れ)
console.log(safe);  // ❌ ReferenceError

// var は再宣言できてしまう
var count = 1;
var count = 2; // エラーにならない → バグの温床
let total = 1;
let total = 2; // ❌ SyntaxError(安全)

ブロックスコープとは { } の中だけで有効な範囲のことです。let / const はブロックを出ると消えるので、意図しない上書きが起きません。

いつ使う?

  • const — 基本はこれ。API URL、DOM要素の参照、設定値など変わらない値
  • let — カウンター、ループ変数、条件によって変わる値
  • var — 使わない。既存コードを読む際に意味を理解するために知っておく程度でOK

間違いやすいポイント

❌ const のオブジェクト・配列の中身は変更できる

const は「変数への再代入禁止」であり「中身の変更禁止」ではありません。

const arr = [1, 2, 3];
arr.push(4);  // ✅ OK(中身の変更は可能)
arr = [5, 6]; // ❌ エラー(再代入は不可)

const user = { name: "太郎" };
user.name = "花子"; // ✅ OK(プロパティ変更は可能)
user = {};          // ❌ エラー(再代入は不可)

❌ let を使いすぎる

「変わるかもしれないから let」と全部 let にするのはNG。基本は const にして、「本当に再代入が必要」な場合のみ let を使います。

よくある疑問

Q: varを使ってはいけないの?

A: 動きますが、スコープの問題でバグが起きやすいです。letかconstを使いましょう。

Q: letとconstはどう使い分ける?

A: 値を変更する変数はlet、変更しない変数はconstを使います。迷ったらconstから始めましょう。

Q: varはなぜ問題になるの?

A: varは関数スコープなので、if文やfor文の中で宣言しても外から使えてしまい、予想外のバグが起きます。

関連用語

  • 変数 — 値を格納する入れ物。var/let/const で宣言する
  • スコープ — 変数が有効な範囲。let/const はブロックスコープ
  • JavaScript — var/let/const が使われる言語

📖 関連レッスン

レッスンを見る →

関連ブログ記事

⚠️ 関連するエラー

❓ 関連するQ&A