Code Fix

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

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

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

 1  function makeAdders(nums) {
 2    const fns = [];
 3    for (_____ i = 0; i < nums.length; i++) {
             ^
 4      fns.push(() => nums[i] + 1);
 5    }
 6    return fns;
 7  }
 8  const fns = makeAdders([5, 10, 15]);
 9  console.log(fns[0](), fns[1](), fns[2]());
出力: NaN NaN NaN期待: 6 11 16 (エラーにはなりません)

空欄を埋めて実行を通す

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

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

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

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

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