中級 › forループのvarをletに変えないとコールバックが同じ値を指す › パターン4
forループのvarをletに変えないとコールバックが同じ値を指す
varはブロックスコープを持たないため、ループ内で生成した関数はすべて同じ変数を共有します。
1 function makeCounters() { 2 const fns = []; 3 for (_____ i = 0; i < 4; i++) { ^ 4 fns.push(() => i * i); 5 } 6 return fns; 7 } 8 const fns = makeCounters(); 9 console.log(fns[0](), fns[1](), fns[2]());
出力: 16 16 16期待: 0 1 4 (エラーにはなりません)
空欄を埋めて実行を通す
varは3つの関数で同じiを共有するため、全員がループ終了後の値を参照します。
次の問題