
ちらっとmdnのforの項目を読んでいて知らなかったことがあったので書いておこうと思います。
for文はこのような構文になっています。
for (initialization; condition; afterthought)
statement
この initialization
部分で興味深い挙動があります。
初期化する部分で var
や何も書かずに(暗黙の var
で)変数を初期化すると、ループ内のローカル変数にはならず、 forループが属するスコープと同じスコープ になります。let
を使うとループ内のローカル変数になります。
let
や const
を使うのが当たり前になって var
での挙動を忘れてしまっていたので、もともとこういう動作だったのだと思います。
でも変数の定義と初期化がforループの初期化部分にあるのに、ローカル変数にならないのは違和感がありますね。