
ちらっとmdnのforの項目を読んでいて知らなかったことがあったので書いておこうと思います。
for文はこのような構文になっています。
for (initialization; condition; afterthought)
statement
この initialization 部分で興味深い挙動があります。

初期化する部分で var や何も書かずに(暗黙の var で)変数を初期化すると、ループ内のローカル変数にはならず、 forループが属するスコープと同じスコープ になります。let を使うとループ内のローカル変数になります。
let や const を使うのが当たり前になって var での挙動を忘れてしまっていたので、もともとこういう動作だったのだと思います。
でも変数の定義と初期化がforループの初期化部分にあるのに、ローカル変数にならないのは違和感がありますね。
