let・const・varの違いは?
💬 質問
変数宣言の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 = "鈴木"; // エラーにならない(バグの原因) 判断フロー
- まず
constで宣言する - 「あとで値を変えたい」とわかったら
letに変える 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 は使わない。
解決しなかった?
エンジニアに質問する →