I 知っているなぜconst
がforループで機能しないのか。新しいスコープを作成し、それに値をコピーする必要があります。だからこれは飛ばないでしょう。
for(const i = 0; i < 5; i++) console.log(i);
これはそうなるのに対して。
for(let i = 0; i < 5; i++) console.log(i);
ただし、このようなオブジェクトのプロパティをループすると、両方が機能することに気付きました。
for(let property in thingy) console.log(property);
for(const property in thingy) console.log(property);
理由はわかりません。
for (const property in object)
が機能するのは、反復ごとに、その反復のみにスコープされる新しい変数を取得するためです。ループ内のクロージャを使用すると、簡単に確認できます。
for (const property in {a: 1, b: 2}) {
setTimeout(() => {
console.log(property);
}, 100);
}
これはa
とb
をログに記録しますが、const
をvar
に変更すると、b
を2回ログに記録します。
最初の例では、i
はi++
を介して変更されます。 const
は変更できないため、エラーが発生します。
2番目の例では、property
ループの反復ごとにfor
が再定義されます(各インスタンスはスコープ外になり、同じ変数に再割り当てするのではなく、新しいインスタンスが作成されます) 。値を変更するのではなく実際に再定義しているので、const
は問題なく機能します。