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 が使われる言語
📖 関連レッスン
レッスンを見る →