for (var i = 0; i < somearray.length; i++)
{
myclass.foo({'arg1':somearray[i][0]}, function()
{
console.log(somearray[i][0]);
});
}
如何将somearray或其索引之一传递给匿名函数? 是的someArray已经在全球范围内,但我仍然得到的someArray [i]是未定义JavaScript的参数匿名函数
for (var i = 0; i < somearray.length; i++)
{
myclass.foo({'arg1':somearray[i][0]}, function()
{
console.log(somearray[i][0]);
});
}
如何将somearray或其索引之一传递给匿名函数? 是的someArray已经在全球范围内,但我仍然得到的someArray [i]是未定义JavaScript的参数匿名函数
在匿名功能i
捕获可变i
,而不是它的值。在循环结束时,i
等于somearray.length
,因此当您调用函数时,它会尝试访问不存在的元素数组。
您可以通过一个函数,构造函数捕获变量的值解决这个问题:
function makeFunc(j) { return function() { console.log(somearray[j][0]); } }
for (var i = 0; i < somearray.length; i++)
{
myclass.foo({'arg1':somearray[i][0]}, makeFunc(i));
}
makeFunc
的争论可能会被命名为i
,但我把它叫做j
表明它是一个不同的变量比在循环中使用的还要多。
+1对问题给出了很好的解释,并提供了一个解决方案! – Matt 2010-06-11 15:19:41
我明白了你的观点。谢谢。但我只是不知道如何调用makeFunc。 – Phonethics 2010-06-11 18:16:19
太棒了!我解决了我的问题。这对于我来说在JavaScript中完全是一件新事物! – Phonethics 2010-06-12 03:45:20
所有函数/方法可以作为唯一的回调。当你调用回调函数时,你将变量传递给它。
var myclass = {
foo: function(params, callback){
// do some stuff
callback(variable1, variable1, variableN);
}
}
怎么样关闭:
for (var i = 0; i < somearray.length; i++) {
var val = somearray[i][0];
myclass.foo({'arg1': val}, function(v) {
return function() {console.log(v) };
}(val));
}
for (var i = 0; i < somearray.length; i++)
{
myclass.foo({'arg1':somearray[i][0]}, function(somearray)
{
console.log(somearray[i][0]);
});
}
然后用PARAM foo方法调用匿名函数。
您可以通过使用回调传递变量值annoymous功能, 像
myclass.foo(function(variable){
return function(){
console.log(variable);
}
})(variableValue);
);
这是一个共同的问题 - 查看所有相关的问题的http://计算器。 com/questions/tagged/javascript + closures + loops – Anurag 2010-06-11 18:49:08