JavaScriptのvarはなぜ使わないほうが良いのか?―初心者エンジニアのためのやさしい理由解説

こんにちは。ゆうせいです。

JavaScriptの変数宣言には、次の3つのキーワードがありますよね。

var
let
const

でも最近のコードや教材を見ると、var はほとんど見かけなくなってきました。

varって悪いの?」「letconstと何が違うの?」という疑問を感じたことはありませんか?

この記事では、なぜ var は使わないほうがいいのか? を、具体例・図解・比較表を交えて、やさしく解説していきます!


結論:varは「危険な動きをすることが多く、バグの原因になりやすい」から!

最近では letconst を使うのが推奨されています。

では、なぜ var は避けるべきなのでしょうか?


① スコープが「関数単位」で直感的でない

var は「関数スコープ」

function test() {
  if (true) {
    var message = "こんにちは";
  }
  console.log(message); // → こんにちは(!?)
}
test();

letconst は「ブロックスコープ」

function test() {
  if (true) {
    let message = "こんにちは";
  }
  console.log(message); // → ReferenceError!
}

つまり、var は if文やfor文の中で宣言しても、外に出てきてしまうんです。

これはスコープが“ゆるすぎる”という問題!


② 「巻き上げ(Hoisting)」によって予期せぬ動きをする

var の変数は、宣言だけ先に処理される(初期化は後)

console.log(name); // → undefined(!?)
var name = "太郎";

このコード、エラーにはならず undefined が表示されます。

理由は、「変数の宣言だけが先に巻き上げ(hoist)られる」ため。

実際の内部処理はこんな感じ:

var name;         // 宣言だけ先にされる
console.log(name); // → undefined
name = "太郎";

このような仕組みがバグの原因になることがとても多いです。


③ 同じ変数名で再宣言できてしまう

var greeting = "こんにちは";
var greeting = "こんばんは"; // OK(でもこれ、意図してた?)

これは「上書きされてしまう」ので、変数の衝突やバグの温床になります。

letconst ではエラーになります:

let greeting = "こんにちは";
let greeting = "こんばんは"; // → SyntaxError!


④ ループと非同期処理で問題を起こす

varだと、ループ変数が共有される

for (var i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 1000);
}
// → 3, 3, 3(!?)

letを使えば意図どおりに動く

for (let i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 1000);
}
// → 0, 1, 2

var だと、1つのiを3つの関数が共有してしまうため、ループ後の値(3)になるんです。


比較表:var, let, const

特徴varletconst
スコープ関数スコープブロックスコープブロックスコープ
再宣言可(バグの原因)不可不可
再代入不可
巻き上げあり(初期化なし)あり(ただしTDZ)あり(TDZ)
安全性△(低)
推奨されるか?◎(定数用)

結論:今後はvarを使わず、letconstを使おう!

  • var は古い書き方。意図しない動きをする可能性が高い
  • let は変数、const は定数に使い分ける
  • 基本は const を使い、再代入が必要なときだけ let を使うのがベストプラクティス

今後の学習のヒント

次に進むなら、次のようなテーマがおすすめです!

  • 巻き上げ(Hoisting)とTDZ(Temporal Dead Zone)
  • JavaScriptのスコープチェーンとは?
  • let/const/varの使い分けをマスターする練習問題
  • モダンJavaScript(ES6以降)のベストプラクティス

varを避けることで、予測しやすく安全なコードを書けるようになります。

迷ったらまずは const、必要なときだけ let を使う習慣をつけていきましょう!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。