中級 › 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 (エラーにはなりません)
空欄を埋めて実行を通す
配列の要素を参照する場合も同じ罠にかかります。ループ終了後のiは配列の範囲外を指し、nums[i]はundefinedになります。
次の問題