JavaScriptの世界へようこそ!
フロントエンドの深淵を覗き込もうとしているあなたへ、まずは「ようこそ、このエキサイティングな迷宮へ!」と伝えたいです。
JavaScriptを学び始めると、必ずと言っていいほど「巻き上げ(Hoisting)」という言葉にぶつかりますよね。これ、最初は本当に呪文のように感じるはずです。でも大丈夫、安心してください。伝説のアーキテクトである私が、専門用語の壁を崩して、あなたの頭の中にスッと入るような「イメージ」をお話しします。
—
「巻き上げ」って、結局何が起きているの?
JavaScriptという言語は、コードを実行する前に「準備フェーズ」という名の「下見」をします。これが「巻き上げ」の正体です。
想像してみてください。あなたは今、新しい料理を作ろうとしています。キッチンに立つ前に、「今日使う道具と材料は何かな?」とレシピをパッと見て、頭の中にリストを作る……そんなイメージです。
`var` の場合:忘れ物はないけど「中身は空っぽ」
昔からある `var` は、ちょっとおせっかいな性格です。準備フェーズで変数を見つけると、即座に「君の名前はメモしたよ!とりあえず中身は空っぽ(undefined)にしておくね!」と気を利かせてくれます。
console.log(myFavorite); // エラーにならない!でも「undefined(未定義)」と表示される
var myFavorite = “カレーライス”;
/
裏側で起きていること:
1. JavaScript「お、myFavoriteっていう変数がいるな。とりあえず場所だけ確保してundefinedにしとこ」
2. 実行開始!
3. console.log(myFavorite) を実行 → 「空っぽだよ」と返ってくる
4. myFavorite に “カレーライス” を代入
/
この「中身は空っぽだけど、存在は知っているよ」という状態が、`var` のゆるいところ。これがバグの温床になりやすいんです。
—
`let` と `const` の場合:「そこ、まだ触っちゃダメ!」
現代のJavaScriptの主役である `let` と `const` は、もっと厳格です。彼らは準備フェーズで変数を見つけても、「場所は確保したけど、準備ができるまで絶対に触らせないよ!」というガードを固めます。
この「場所は確保されているのに、まだ使えない期間」のことを、専門用語で「一時的死域(Temporal Dead Zone: TDZ)」と呼びます。名前はかっこいいですが、要は「立ち入り禁止エリア」です。
// console.log(myGoal); // ここで実行すると「ReferenceError(参照エラー)」になる!
let myGoal = “世界一のエンジニア”;
/
裏側で起きていること:
1. JavaScript「myGoalという変数を発見。場所は確保したぞ」
2. 「でも、この行を実行するまでは、絶対に触っちゃダメだよ!」(TDZの始まり)
3. 実行開始!
4. console.log(myGoal) を実行 → 「まだ準備できてない!ダメ!」(エラー発生)
/
`let` や `const` がエラーを吐いてくれるのは、決して意地悪ではありません。「あなたがまだ準備していない変数を使おうとしているよ!危ないよ!」と親切に教えてくれている「安全装置」なんです。
—
現場の視点:なぜこの違いが大事なのか
初学者の方は、`undefined` が出てきたり、エラーが出たりすると「自分が間違っているのかな?」と不安になるかもしれません。でも、これだけは覚えておいてください。
「`let` や `const` でエラーが出るのは、プログラムが正しく動こうとしている証拠」です。
`var` を使っていると、中身が空っぽのままコードが先に進んでしまい、あとから原因不明のバグとして現れることがよくあります。一方、`let` や `const` は、問題が起きた瞬間に「ここがダメ!」と教えてくれるので、修正が圧倒的に楽なんです。
賢い使い分けのルール
現場のプロとして、これだけは持ち帰ってください。
1. 基本は `const` を使う:書き換えない値なら、これが一番安全です。
2. 書き換える必要があるなら `let`:どうしても値が変わる場合だけ使いましょう。
3. `var` は使わない:令和のJavaScript開発において、`var` を使う理由はほとんどありません。博物館にしまっておきましょう。
—
最後に:つまずくのは「理解している証拠」
「巻き上げ」の仕組みを気にしている時点で、あなたはすでにJavaScriptの本質に近づいています。最初は誰だって、この「見えない準備フェーズ」に翻弄されるものです。
もしコードが期待通りに動かなかったら、「おっと、今はまだ準備中かな?」と一呼吸置いて、変数を定義している場所を見直してみてください。それだけで、あなたの書くコードはグッとプロの品質に近づきます。
焦らず、一歩ずつ。一緒にこの面白い世界を楽しんでいきましょう!何か分からなくなったら、いつでもここに戻ってきてくださいね。応援しています!

コメント