JavaScript | 基礎構文:変数・定数 – var を使わない理由

JavaScript
スポンサーリンク

初心者向け:なぜ var を使わないのか

JavaScript には変数宣言の方法が3つあります:varletconst
昔は var しかありませんでしたが、今は 基本的に letconst を使い、var は避けるのが定石です。理由は「挙動がわかりにくく、バグを生みやすい」からです。


var の問題点

1. スコープが「関数スコープ」

  • var関数単位で有効。ブロック {} の中で宣言しても外から見えてしまう。
if (true) {
  var x = 10;
}
console.log(x); // 10(ブロック外でも見える)
JavaScript

👉 letconst は「ブロックスコープ」なので、波括弧の中だけ有効。直感的で安全。


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、必要なら letvar は使わない。

ミニ練習

  • 問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: letconst で安全に宣言してみよう。
const TAX = 0.1;   // 変わらない値
let total = 0;     // 変わる値
total += 100 * (1 + TAX);
console.log(total); // 110
JavaScript

結論

var は「古い・危険・予期せぬ挙動をする」ため、現代の JavaScript では使わない。
「まず const、必要なら let」 というルールを守れば、初心者でも安心してコードを書けます。

タイトルとURLをコピーしました