Javascript为内部函数提供参数

Javascript为内部函数提供参数,javascript,Javascript,因此,我的基本设置如下: for (var i = 0; i < 3; i++) { var indices = [-1, -1, -1]; while (index == -1) { // Do Stuff index[i] = newIndex; } var press = function() { alert(i); }; new control({press: press});

因此,我的基本设置如下:

for (var i = 0; i < 3; i++) {
    var indices = [-1, -1, -1];
    while (index == -1) {
        // Do Stuff
        index[i] = newIndex;  
    }       
    var press = function() { alert(i); };
    new control({press: press});                
}
for(变量i=0;i<3;i++){
var指数=[-1,-1,-1];
而(索引==-1){
//做事
索引[i]=新索引;
}       
var press=function(){alert(i);};
新控件({press:press});
}
现在,当我按下每个新控件而不是获取警报(0)、警报(1)和警报(2)时,我将获取警报(3)、警报(3)和警报(3)。
我能理解发生了什么。现在我的问题是:如何将不同的索引传递给我想要的函数?

这是因为闭包变量
i
,解决方案是为每个循环创建一个私有闭包

for (var i = 0; i < 3; i++) {
    var indices = [-1, -1, -1];
    while (index == -1) {
        // Do Stuff
        index[i] = newIndex;  
    }       
    var press = (function(myvar){
        return function() { alert(myvar); };
    })(i);
    new control({press: press});                
}
for(变量i=0;i<3;i++){
var指数=[-1,-1,-1];
而(索引==-1){
//做事
索引[i]=新索引;
}       
变量压力=(函数(myvar){
返回函数(){alert(myvar);};
})(i) );
新控件({press:press});
}

这是因为闭包变量
i
,解决方案是为每个循环创建一个私有闭包

for (var i = 0; i < 3; i++) {
    var indices = [-1, -1, -1];
    while (index == -1) {
        // Do Stuff
        index[i] = newIndex;  
    }       
    var press = (function(myvar){
        return function() { alert(myvar); };
    })(i);
    new control({press: press});                
}
for(变量i=0;i<3;i++){
var指数=[-1,-1,-1];
而(索引==-1){
//做事
索引[i]=新索引;
}       
变量压力=(函数(myvar){
返回函数(){alert(myvar);};
})(i) );
新控件({press:press});
}
使用闭包:

var press = (function (x) {
    return function () {
        alert(x);
    };
})(i);
这样,当前的
i
值就保存在一个安全的地方,一个私有函数中

请注意,在循环内部声明变量(使用
var
)不是标准的,您应该在循环外部声明
变量。

使用闭包:

var press = (function (x) {
    return function () {
        alert(x);
    };
})(i);
这样,当前的
i
值就保存在一个安全的地方,一个私有函数中


请注意,在循环内部声明变量(使用
var
)不是标准的,您应该在循环外部声明
变量。

出于学习目的,最好不要调用闭包参数
i
,因为这会让人困惑。谢谢,现在可以用了:)。现在,另一个问题是实际发生了什么:(函数(a))(b)意味着b作为参数传递。。。。哦,哇,现在我自己弄到了:这是一个匿名函数,传递参数b?!可能您应该阅读闭包的相关内容,并为您提供一个学习的起点。最好不要调用闭包参数
i
,因为这会让人困惑。谢谢,现在可以用了:)。现在,另一个问题是实际发生了什么:(函数(a))(b)意味着b作为参数传递。。。。哦,哇,现在我自己弄到了:这是一个匿名函数,传递参数b?!也许您应该阅读闭包的相关内容,并且应该给您一个开始