for (var i = 0; i < somearray.length; i++)
{
myclass.foo({'arg1':somearray[i][0]}, function()
{
console.log(somearray[i][0]);
});
}
如何将somearray或其中一个索引传递给匿名函数? somearray已经在全球范围内,但我仍然得到 somearray [i]未定义
答案 0 :(得分:31)
匿名函数中的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 :(得分:10)
关闭怎么样:
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) );
}
答案 2 :(得分:0)
for (var i = 0; i < somearray.length; i++)
{
myclass.foo({'arg1':somearray[i][0]}, function(somearray)
{
console.log(somearray[i][0]);
});
}
然后在方法foo中使用param调用匿名函数。
答案 3 :(得分:0)
您可以使用回调将变量值传递给匿名函数,
之类的东西myclass.foo(function(variable){
return function(){
console.log(variable);
}
})(variableValue);
);
答案 4 :(得分:-2)
所有函数/方法只能用作回调。当你调用回调函数时,你将变量传递给它。
var myclass = {
foo: function(params, callback){
// do some stuff
callback(variable1, variable1, variableN);
}
}