Code Fix

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

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

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

 1  function makeLabelers(labels) {
 2    const fns = [];
 3    for (_____ i = 0; i < labels.length; i++) {
             ^
 4      fns.push(() => labels[i]);
 5    }
 6    return fns;
 7  }
 8  const fns = makeLabelers(["a", "b", "c"]);
 9  console.log(fns[0](), fns[1](), fns[2]());
出力: undefined undefined undefined期待: a b c (エラーにはなりません)

空欄を埋めて実行を通す

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

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

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

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

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