JavaScriptのvarはなぜ使わないほうが良いのか?―初心者エンジニアのためのやさしい理由解説
こんにちは。ゆうせいです。
JavaScriptの変数宣言には、次の3つのキーワードがありますよね。
var
let
const
でも最近のコードや教材を見ると、var はほとんど見かけなくなってきました。
「varって悪いの?」「letやconstと何が違うの?」という疑問を感じたことはありませんか?
この記事では、なぜ var は使わないほうがいいのか? を、具体例・図解・比較表を交えて、やさしく解説していきます!
結論:varは「危険な動きをすることが多く、バグの原因になりやすい」から!
最近では let と const を使うのが推奨されています。
では、なぜ var は避けるべきなのでしょうか?
① スコープが「関数単位」で直感的でない
var は「関数スコープ」
function test() {
if (true) {
var message = "こんにちは";
}
console.log(message); // → こんにちは(!?)
}
test();
let と const は「ブロックスコープ」
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(でもこれ、意図してた?)
これは「上書きされてしまう」ので、変数の衝突やバグの温床になります。
let や const ではエラーになります:
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
| 特徴 | var | let | const |
|---|---|---|---|
| スコープ | 関数スコープ | ブロックスコープ | ブロックスコープ |
| 再宣言 | 可(バグの原因) | 不可 | 不可 |
| 再代入 | 可 | 可 | 不可 |
| 巻き上げ | あり(初期化なし) | あり(ただしTDZ) | あり(TDZ) |
| 安全性 | △(低) | ◎ | ◎ |
| 推奨されるか? | ❌ | ◎ | ◎(定数用) |
結論:今後はvarを使わず、letとconstを使おう!
varは古い書き方。意図しない動きをする可能性が高いletは変数、constは定数に使い分ける- 基本は
constを使い、再代入が必要なときだけletを使うのがベストプラクティス
今後の学習のヒント
次に進むなら、次のようなテーマがおすすめです!
- 巻き上げ(Hoisting)とTDZ(Temporal Dead Zone)
- JavaScriptのスコープチェーンとは?
- let/const/varの使い分けをマスターする練習問題
- モダンJavaScript(ES6以降)のベストプラクティス
varを避けることで、予測しやすく安全なコードを書けるようになります。
迷ったらまずは const、必要なときだけ let を使う習慣をつけていきましょう!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
山崎講師2025年11月2日Pythonの「なるほど!」と思えるユニークな機能④
山崎講師2025年11月2日Pythonの「なるほど!」と思えるユニークな機能③
山崎講師2025年11月2日Pythonの「なるほど!」と思えるユニークな機能②
山崎講師2025年11月2日Pythonの「なるほど!」と思えるユニークな機能①