javascript 复制一个变量用于函数
javascript copy a variable for use in function
我不太确定如何更好地表达这个问题,但基本上我的问题是:
我有这样的代码(不完全是,这段代码真的很简单,我的有点复杂):
var funcs = [];
for (var i = 0; i < 10; i++) {
funcs[i] = function() { return i; };
}
所以想法是 funcs
中的每个函数在调用时都会 return 从 0 到 9 的每个数字。但问题是每个人在调用时仍然引用变量 i
,所以它们都会 return 9. 我如何按预期完成这项工作(即对于所有 n,funcs[n]() === n
)?如何让每个函数作用域只捕获 i
的当前值,而不捕获变化的值?
var funcs = [];
for (var i = 0; i < 10; i++) {
funcs[i] = makeFunction(i);
}
function makeFunction(i) {
return function() {
return i;
}
}
返回函数中的 i
绑定到 makeFunction
中的局部变量 i
而不是主代码块中的 i
。
我可以这样做:
var funcs = [];
for (var i = 0; i < 10; i++) {
(function (i) {
funcs[i] = function () {
return i;
};
})(i);
}
alert(funcs[3]());
为每次迭代创建一个单独的激活帧
您也可以使用地图:
var numbers = [];
for (var i = 0; i < 10; i++) {
numbers.push(i);
}
var funcs = numbers.map(function (i) {
return function () { return i; };
});
alert(funcs[3]());
我不太确定如何更好地表达这个问题,但基本上我的问题是:
我有这样的代码(不完全是,这段代码真的很简单,我的有点复杂):
var funcs = [];
for (var i = 0; i < 10; i++) {
funcs[i] = function() { return i; };
}
所以想法是 funcs
中的每个函数在调用时都会 return 从 0 到 9 的每个数字。但问题是每个人在调用时仍然引用变量 i
,所以它们都会 return 9. 我如何按预期完成这项工作(即对于所有 n,funcs[n]() === n
)?如何让每个函数作用域只捕获 i
的当前值,而不捕获变化的值?
var funcs = [];
for (var i = 0; i < 10; i++) {
funcs[i] = makeFunction(i);
}
function makeFunction(i) {
return function() {
return i;
}
}
返回函数中的 i
绑定到 makeFunction
中的局部变量 i
而不是主代码块中的 i
。
我可以这样做:
var funcs = [];
for (var i = 0; i < 10; i++) {
(function (i) {
funcs[i] = function () {
return i;
};
})(i);
}
alert(funcs[3]());
为每次迭代创建一个单独的激活帧
您也可以使用地图:
var numbers = [];
for (var i = 0; i < 10; i++) {
numbers.push(i);
}
var funcs = numbers.map(function (i) {
return function () { return i; };
});
alert(funcs[3]());