let・const・varの違いは?

JavaScript 📅 2026年4月29日 👤 学習者さん

💬 質問

変数宣言のlet、const、varの違いがよくわかりません。どれを使えばいいですか?

✅ 回答

結論:const を基本にして、値が変わる変数だけ let。var は使わない。

3つの違い一覧

const let var
再代入❌ できない✅ できる✅ できる
再宣言✅(バグの原因)
スコープブロックブロック関数(広すぎる)
使うべき?◎ 基本○ 必要時のみ✕ 使わない

const の使い方

// const:再代入できない(基本はこれを使う)
const name = "田中";
// name = "鈴木"; // ❌ エラー!再代入できない

// ただし、オブジェクトや配列の中身は変更できる
const scores = [80, 90];
scores.push(85); // ✅ OK(配列自体を別のものに変えてはいない)

let の使い方

// let:再代入できる(値が変わる変数に使う)
let count = 0;
count = count + 1; // ✅ OK
count = count + 1; // ✅ OK(カウンターなど)

let message = "読み込み中";
message = "完了!"; // ✅ 状態が変わる変数

var を使わない理由

// var:古い書き方(使わない)
// 問題:ブロックスコープが効かない
if (true) {
  var x = 10; // ifの外からもアクセスできてしまう
}
console.log(x); // 10(letなら ReferenceError になる)

// 問題:同じ名前で再宣言できてしまう
var name = "田中";
var name = "鈴木"; // エラーにならない(バグの原因)

判断フロー

  1. まず const で宣言する
  2. 「あとで値を変えたい」とわかったら let に変える
  3. var は絶対に使わない

実際のコードでは、変数の90%は const で済みます。let が必要なのはカウンターやループ変数くらいです。

コード例で比較

// const: 再代入できない(基本これを使う)
const name = "太郎";
// name = "花子"; // ❌ エラー!

// let: 再代入できる(値が変わる変数に使う)
let score = 0;
score = score + 10; // ✅ OK

// var: 古い書き方(使わない)
var old = "古い"; // スコープが関数単位で予期しないバグの原因に

// 配列やオブジェクトはconstでも中身を変更できる
const fruits = ["りんご", "みかん"];
fruits.push("バナナ"); // ✅ OK(配列自体の再代入ではない)
// fruits = []; // ❌ エラー(再代入はできない)

varを使わない理由

// varの問題:ブロックスコープがない
if (true) {
  var x = 10; // ifブロックの外でもアクセスできてしまう
}
console.log(x); // 10(意図しない動作)

// letなら安全
if (true) {
  let y = 10;
}
// console.log(y); // ❌ エラー(ブロック外からアクセスできない)

結論:まず const を使う。値を変更する必要があるときだけ let を使う。var は使わない。

解決しなかった?

エンジニアに質問する →

⚠️ 関連するエラー

📖 関連する用語