中級 › 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 (エラーにはなりません)
空欄を埋めて実行を通す
ループ終了後、varのiは3(配列の範囲外)になっており、labels[3]はundefinedです。letならそれぞれの関数が自分の回のインデックスを覚えます。
次の問題