こんにちは、私は JavaScript が初めてで、次のコードを理解できません。
var createAdders = function () {
var fns = [];
for (var i = 1; i < 4; i++) {
fns[i] = (function (n) {
return i + n;
});
}
return fns;
}
var adders = createAdders();
adders[1](7); //11 ??
adders[2](7); //11 ??
adders[3](7); //11 ??
私が理解していることから、7は引数として渡されますがcreateAdders()
、変数に7を割り当てないためcreateAdders()
、匿名関数内の次の関数に7が渡され、変数に割り当てられますn
。
私の論理は正しいですか?
上記のコードは機能しているように見えますが、すべての呼び出しの結果は 11 です。クロージャーが役立つ状況の例として、非常に信頼できるブログでこのコードを見つけました。閉鎖の利点。
var createAdders = function () {
var fns = [];
for (var i = 1; i < 4; i++) {
(function (i) {
fns[i] = (function (n) {
return i + n;
});
})(i) //// why is (i) used here? what purpose does it serve??////
}
return fns;
}
var adders = createAdders();
adders[1](7); //8
adders[2](7); //9
adders[3](7); //10
ここにも同じロジックが適用されますか?
n に値 7 がどのように割り当てられているかを理解する必要があります
新しいコードで (i) が関数の最後に使用されているのはなぜですか?