中級 › 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 (エラーにはなりません)
空欄を埋めて実行を通す
varで宣言したiはループ終了後4になっており、3つの関数すべてがその4を参照してしまいます。letなら各回ごとに独立したiが使われます。
次の問題