C
JavaScript/基礎/Lesson 03

変数 — let · const · var

45分·theory
このチャプター
2/5

変数 — let · const · var

🎯 このlessonを読み終えたら

このlessonを読み終えると、以下の3つを自信を持ってできるようになります。

  • varなぜ危険なのか (function scope · hoisting)
  • ✅ TDZ (Temporal Dead Zone) とは何か
  • ✅ 再代入の可否に基づいた const / let の選択方法

学習目標をチェックリストとして手元に置き、すべてに答えられるようになったらlessonを閉じてください。

変数とは何か

核心を一言で

変数 = 値を名前で保存する入れ物。JSには3つのキーワード — var·let·const — があり、歴史的な理由から共存しています。結論: まずconst、必要ならlet、varは絶対NG

const — 一度決めたらおしまい

javascript
const PI = 3.14;
PI = 3.15;   // ❌ TypeError: 再代入不可

最もよく使うキーワード。変数の95%はconstで十分です。再代入は通常不要なのです。

> ⚠️ よくある誤解: constは再代入を禁止するだけで、内部の変更は可能です:

javascript
const obj = { name: "ホン" };
obj.name = "ギルドン";              // ✅ OK — オブジェクト*内部*プロパティ変更
console.log(obj);                // { name: "ギルドン" }   ← 変わった!

// obj = { other: "X" }; // ❌ TypeError: Assignment to constant variable

//

// 💡 const = "変数が指すアドレス" は変更不可

// オブジェクト内部のコンテンツは別の話 → 自由に修正可能

code

## let — *本当に値を変える必要があるとき*

javascript

let count = 0; // 🔓 変更可能な変数

for (let i = 0; i < 10; i++) { // i = 0,1,2,3,...,9
count = count + i; // 累積 (0+1+2+...+9)
}

console.log(count); // 45 ← 0+1+2+...+9 の合計

code

ループカウンターや累積合計など、*値が変わらなければならない*場合に使います。constから始めて、*本当に必要なときだけ*letに切り替えましょう。

## var — 古いキーワード、*使わないでください*

javascript

var x = 10; // ❌

code

2015年以前のJSには`var`しかありませんでした。しかし:
- **関数スコープ** — `if`の中で宣言しても関数全体に適用される
- **ホイスティング (hoisting)** — 宣言した*位置に関わらず*使用可能(混乱を招く)
- **再宣言可能** — 同じ名前を2回宣言してもエラーにならない

こうした*予測不可能*な特性がバグを生み出します。今では*レガシーコード*にしか見られません。

## ブロックスコープ — let·constの*真の価値*

javascript

function example() {

if (true) {

// 🔲 ブロック開始 — { 内 }

let x = 10; // 📦 ブロック内でのみ有効

const y = 20; // 📦 ブロック内でのみ有効

var z = 30; // 🌐 var はブロック無視 → 関数全体で有効

}

// 🔲 ブロック終了 — } 外

console.log(z); // 30 ← ✅ var なので if 外からもアクセス可能
console.log(x); // 💥 ReferenceError: x is not defined
// (let はブロック内でのみ有効なので既に消滅)
}

example(); // ▶️ 呼び出すと上記のコードが実際に実行される!

code

`let`·`const`は宣言した*ブロック(`{}`)内でのみ*有効です。*予測可能な動作* + *変数名の衝突防止*を実現します。

## 命名規則

javascript

// camelCase — 推奨

const userName = "ホン・ギルドン";

const isActive = true;

const userList = [];

// PascalCase — クラス·コンポーネント

class User {}

function MyComponent() {}

// UPPER_CASE — 定数

const MAX_RETRIES = 3;

const API_URL = "https://api.example.com";

code

## まとめ

javascript

// 99% の場合

const userName = "ホン・ギルドン";

// ループ·再代入が必要
let count = 0;

// var — 絶対 X
``

まずconst`を使い、本当に必要なときだけletに切り替えましょう。

⚡ 実際に試してみよう — const · let · var

constとletを直接操作して、再代入時にどのようなエラーが出るか確認してみましょう。
✏️ JS 코드
📟 コンソール出力
▶ 実行ボタンを押してください
⚠️ ブラウザのサンドボックスで実行 — console.log()のみ対応、alert/fetchは不可

🤖 AIにこう依頼してみよう

このlessonの概念を理解すれば、AIに具体的に指示できるようになります。漠然とした「直して」ではなく、語彙を持ったリクエスト — それがトークン節約の第一歩です。

  • 「このコードのvarをすべてconst/letに変換して」
  • 「再代入の可否を分析してconstを優先に整理して」
  • 「このコードでhoistingの問題が起きる可能性を診断して」

なぜこれがトークンを減らすのか

概念を知らないままAIの回答を受け取っても、「それって何ですか?」とまた聞き直さなければなりません。その「聞き直し」がトークンを消費します。概念を一度身につければ、会話が一度で終わります

先に読むとよい概念: JavaScriptとは?
次のおすすめ: データ型
変数 (var, let, const) - JavaScript