Code Fix

中級 › 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 (エラーにはなりません)

空欄を埋めて実行を通す

広告
広告スロット(未設定)

forループのvarをletに変えないとコールバックが同じ値を指す

ループが終わったあとに関数を呼び出すと、全て最後の値を参照します。letはループの繰り返しごとに新しい束縛を作るため、この問題が起きません。

このエラーの解説と類題をまとめて見る →

広告
広告スロット(未設定)