<分区>
您好,我是 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) 在新代码的函数末尾使用?