Code Fix

中級forループのvarをletに変えないとコールバックが同じ値を指す › パターン2

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

varはブロックスコープを持たないため、ループ内で生成した関数はすべて同じ変数を共有します。

 1  function makeMultipliers() {
 2    const fns = [];
 3    for (_____ i = 1; i <= 3; i++) {
             ^
 4      fns.push((x) => x * i);
 5    }
 6    return fns;
 7  }
 8  const fns = makeMultipliers();
 9  console.log(fns[0](10), fns[1](10), fns[2](10));
出力: 40 40 40期待: 10 20 30 (エラーにはなりません)

空欄を埋めて実行を通す

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

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

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

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

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