Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript复制变量以在函数中使用_Javascript_Function_Variables_Scope - Fatal编程技术网

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]());