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?!也许您应该阅读闭包的相关内容,并且应该给您一个开始