JavaScriptを学習中に、ふと「えっ?」と思ったことがあります。
配列から1つずつ要素を取り出して表示する、よくある for
文の書き方です。
for (let i = 0; i < characters.length; i++) {
const character = characters[i];
console.log(character.name);
}
この const character = characters[i];
のところ。
「あれ? const
って再代入できないはずなのに、ループのたびにこれでいいの?」
と、不思議に思ったんです。
for文のたびにconstで代入してもOKな理由
結論から言うと、これは再代入ではなく“新しい定義”だからOKなんです!
JavaScriptでは、for (let i = …)
のように let
を使ったループの場合、ループのたびに新しいスコープ(コードの区画)が作られるという特徴があります。
なので、const character = ...
のように書いても、実は毎回まったく新しい character
という定数が作られているんですね。
なんでconstが推奨されるの?
ここで「じゃあ let
でも良くない?」と思う方もいるかもしれません。
確かに let
でも問題なく動きます。
let character = characters[i]; // これでも動く!
でも、再代入する予定がない変数には const
を使うのが今のJavaScriptの基本ルールなんです。
その理由は:
- 再代入のミスを防げる(安全)
- コードを読む人にも意図が伝わりやすい(親切)
- モダンなJSの書き方として定着している
ちなみに:オブジェクトの中身は変えられる!
ちょっとややこしいですが、const
で定義したオブジェクトの中身(プロパティ)は書き換えられます。
const character = { name: "にんじゃわんこ", age: 14 };
character.age = 15; // これはOK!
character = {}; // これはNG!(再代入になるから)
だから const
=「まったく不変」というわけではなく、
「定数名そのものに、別の値を再代入できない」という意味なんですね。
このあたりの話はこちらの記事でも詳しく書きました 👉

学びまとめ
for
文で毎回const
を使ってもOKなのは、スコープが毎回新しく作られるから- 再代入しない変数は基本的に
const
にするのがベストプラクティス - 小さな違和感や疑問からでも、深い理解につながる!
おわりに
「え、これっていいの?」と思った小さな疑問から、スコープや再代入のしくみまで知ることができました。
JavaScriptって、表面的に書くだけじゃなくて、“なぜこうなるか”を考えるともっと楽しくなる気がします。
これからも「?」を大切にしながら学んでいこうと思います📝✨
同じようにモヤッとした人のヒントになればうれしいです🌷
コメント