初心者向け:なぜ var を使わないのか
JavaScript には変数宣言の方法が3つあります:var、let、const。
昔は var しかありませんでしたが、今は 基本的に let と const を使い、var は避けるのが定石です。理由は「挙動がわかりにくく、バグを生みやすい」からです。
var の問題点
1. スコープが「関数スコープ」
varは 関数単位で有効。ブロック{}の中で宣言しても外から見えてしまう。
if (true) {
var x = 10;
}
console.log(x); // 10(ブロック外でも見える)
JavaScript👉 let や const は「ブロックスコープ」なので、波括弧の中だけ有効。直感的で安全。
2. 変数の巻き上げ(hoisting)
varは宣言が関数の先頭に「巻き上げ」られる。宣言前に使えてしまうが、値はundefined。
console.log(a); // undefined(エラーではない)
var a = 5;
JavaScript👉 let / const は「宣言前は使えない(TDZ)」ので、エラーになり安全。
3. 再宣言できてしまう
- 同じスコープで何度も宣言できるため、意図せず上書きしてしまう。
var msg = "hello";
var msg = "world"; // エラーにならない
console.log(msg); // "world"
JavaScript👉 let / const は同じスコープで再宣言するとエラー。バグを防げる。
4. グローバル汚染
- グローバルスコープで
varを使うと、window オブジェクトのプロパティになってしまう。
var g = 123;
console.log(window.g); // 123(ブラウザ環境)
JavaScript👉 let / const はグローバルでも window に追加されない。安全。
まとめると
varは古い仕様で、挙動が直感的でない。let/constはブロックスコープで安全。- 再宣言不可・宣言前使用不可なので、バグを防げる。
- 原則
const、必要ならlet。varは使わない。
ミニ練習
- 問1: 以下のコードの出力を予想してみよう。
if (true) {
var a = 1;
let b = 2;
}
console.log(a); // ?
console.log(b); // ?
JavaScript答え: a は 1(外から見える)、b はエラー(ブロック外では見えない)。
- 問2:
varの巻き上げを確認せよ。
console.log(x); // ?
var x = 10;
JavaScript答え: undefined(宣言は巻き上げられるが、代入は後)。
- 問3:
letとconstで安全に宣言してみよう。
const TAX = 0.1; // 変わらない値
let total = 0; // 変わる値
total += 100 * (1 + TAX);
console.log(total); // 110
JavaScript結論
var は「古い・危険・予期せぬ挙動をする」ため、現代の JavaScript では使わない。
「まず const、必要なら let」 というルールを守れば、初心者でも安心してコードを書けます。
