JavaScriptを学び始めると、変数を宣言する時に「var」ではなく「let」や「const」を使いましょう、というアドバイスをよく耳にしますよね。その理由の核心にあるのが、今回解説する「ブロックスコープ」という概念です。
そもそも「スコープ」ってなに?
スコープとは、簡単に言うと「その変数がどこまで見えるか(どこまで使えるか)」という有効範囲のことです。例えば、家の中に自分専用の部屋があるようなものです。リビング(全体)から見えるものと、自分の部屋(ブロック)の中だけで使うものを区別しないと、名前が同じ変数が混ざってしまい、プログラムが混乱してしまいます。
「ブロック」ってどの範囲?
JavaScriptにおけるブロックとは、波括弧 { } で囲まれた範囲のことを指します。if文やfor文、あるいはただの { } だけでもブロックは作れます。
letとconstの魔法
昔のJavaScriptで使われていた「var」は、関数単位でしかスコープを作れませんでした。しかし、「let」や「const」は、この { } で囲まれたブロックごとに独立した世界を作ってくれます。
具体的な事例を見てみましょう。
{
let message = “こんにちは”;
console.log(message); // ここでは表示される
}
console.log(message); // ここではエラーになる!
この例では、ブロックの外から中にアクセスしようとしたためエラーになります。一見不便に思えますが、これは「変数の衝突」を防ぐための強力なガードレールなのです。
なぜ初心者ほどブロックスコープを意識すべきか
初心者のうちは、コードが長くなると「あれ、この変数、さっきどこかで使ったっけ?」と混乱しがちです。ブロックスコープを意識して、必要な場所だけで変数を宣言するクセをつけると、バグが劇的に減ります。
例えば、for文の中だけで使うカウンター変数を「let」で宣言すれば、そのループが終わった瞬間にその変数は消滅します。これにより、メモリの節約にもなりますし、他の処理に悪影響を与える心配もありません。
プログラミングは「いかに自分や他人が読みやすいコードを書くか」というパズルに似ています。ブロックスコープという「部屋」を上手に使い分けて、散らからない綺麗なコードを目指していきましょう!