嗨,我是 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 分配给任何变量,这是否意味着 7 被传递给下一个函数,createAdders()
即匿名函数并分配给变量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)?