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って、表面的に書くだけじゃなくて、“なぜこうなるか”を考えるともっと楽しくなる気がします。
これからも「?」を大切にしながら学んでいこうと思います📝✨
同じようにモヤッとした人のヒントになればうれしいです🌷

コメント