javascript复制变量以在函数中使用
我不确定如何更好地表达这个问题,但基本上我的问题是: 我有这样的代码(不完全是这样,这个代码非常简单,我的代码稍微复杂一些):javascript复制变量以在函数中使用,javascript,function,variables,scope,Javascript,Function,Variables,Scope,我不确定如何更好地表达这个问题,但基本上我的问题是: 我有这样的代码(不完全是这样,这个代码非常简单,我的代码稍微复杂一些): var funcs=[]; 对于(变量i=0;i
var funcs=[];
对于(变量i=0;i<10;i++){
funcs[i]=function(){return i;};
}
因此,funcs
中的每个函数在调用时都将返回0到9之间的数字。但问题是,调用时每个变量仍然引用变量i
,因此它们都将返回9。如何按预期完成此工作(即,对于所有n,funcs[n]()==n
)?如何使每个函数作用域仅捕获I的当前值,而不捕获更改的值?var funcs=[];
var funcs = [];
for (var i = 0; i < 10; i++) {
funcs[i] = makeFunction(i);
}
function makeFunction(i) {
return function() {
return i;
}
}
对于(变量i=0;i<10;i++){
funcs[i]=makeFunction(i);
}
函数makeFunction(i){
返回函数(){
返回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 funcs=[];
对于(变量i=0;i<10;i++){
(职能(一){
funcs[i]=函数(){
返回i;
};
})(i) );
}
警报(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 number=[];
对于(变量i=0;i<10;i++){
数字推送(i);
}
var funcs=numbers.map(函数(i){
返回函数(){returni;};
});
警报(funcs[3]());
在该函数中声明一个值为i
的局部变量并返回它怎么样?显然,这是一个简化的代码,但如果您的函数仅不同于i的值,“i”似乎应该只是一个参数。调用函数,为每个迭代创建单独的激活框架欢迎!我相信这应该回答你的问题:。如果没有,请告诉我。是的,谢谢你回答了。我真的不知道该找什么。
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]());