講師のKです。
プログラミングの学習が進んでくると、最初に出てきた「変数ってそもそも何?」という疑問を持つ人もいると思います。
実は経験者でもときどきハマるほど奥が深いテーマなんです。
最近の書籍や記事では、変数を宣言する際に const
を使うことを推奨する例をよく見かけます。
今回は、この const
の使い方について、スコープ(変数の生きる場所)やブロックの話も交えながら、注意点を深掘りしてみましょう。
スコープとブロックって何?
プログラムの中では、変数が使える範囲(有効な場所)が決まっています。この範囲のことを「スコープ」と呼びます。
- スコープ:変数が生きている範囲。部屋や箱のようにイメージするとわかりやすいです。
- ブロック:
{ }
で囲まれた部分のこと。1つのブロックは1つのスコープを作ります。
{
// ここが1つのブロック
const x = 900;
console.log(x); // 使える
}
console.log(x); // エラー!ブロックの外なので使えない
つまり、同じブロックの中では同じ名前の const
変数を2回宣言できませんが、別のブロックなら同じ名前を使ってもOKです。

では、次の例を考えてみましょう!
コードのすぐ下に答えと解説がありますので、自分で考えたい人はコードの前で一度ストップするのがおすすめです。
① 次のコードはエラーになる?ならない?
const tumbler = 'これはタンブラー';
for (let i = 0; i < 3; i++) {
tumbler = 'これはタンブラーです';
console.log(tumbler);
}
答え:エラーになります。const
で宣言した変数は再代入できないためです。
② 次のコードはエラーになる?ならない?
const tumbler = 'これはタンブラー';
const tumbler = 'これはタンブラーです';
答え:エラーになります。
同じ場所で const tumbler
を2回宣言しているためです。
同じスコープでの再宣言はできません。
③ 次のコードはエラーになる?ならない?
for (let i = 0; i < 3; i++) {
const tumbler = 'これはタンブラーです';
console.log(tumbler);
}
答え:エラーになりません。for
のループは、1回まわるごとに新しいブロック(スコープ)が作られます。
そのため毎回別の tumbler
が作られる扱いになり、再宣言エラーにはなりません。
④ 次のコードはエラーになる?ならない?
for (const i = 0; i < 3; i++) {
const tumbler = 'これはタンブラーです';
console.log(tumbler);
}
答え:エラーになります。const i = 0;
と宣言した変数 i
は再代入できないため、i++
で更新しようとするとエラーになります。
⑤ 次のコードはエラーになる?ならない?
function cup(){
const tumbler = 'これはタンブラーです';
console.log(tumbler);
}
let timer = setInterval(cup, 1000);
答え:エラーになりません。
毎回 cup
関数の中という「別のスコープ」で tumbler
が新しく作られるためです。
いかがでしたか?const
は「再代入できない」だけでなく、「同じスコープで再宣言できない」という特徴もあります。
ブロック( { }
)が新しくなると、別スコープとして扱われる点を覚えておくと、エラーの理由がわかりやすくなります。
Crebit では、学習者が混乱しないよう基本的には let
を使っていますが、const
を使うときは今回の例を思い出して注意してみてください。
こうした仕組みを理解していくことが、プログラム上達の大きな一歩になります!