for (var i = 0; i < somearray.length; i++)
{
myclass.foo({'arg1':somearray[i][0]}, function()
{
console.log(somearray[i][0]);
});
}
如何将 somearray 或其索引之一传递给匿名函数?somearray 已经在全局范围内,但我仍然得到somearray[i] is undefined
for (var i = 0; i < somearray.length; i++)
{
myclass.foo({'arg1':somearray[i][0]}, function()
{
console.log(somearray[i][0]);
});
}
如何将 somearray 或其索引之一传递给匿名函数?somearray 已经在全局范围内,但我仍然得到somearray[i] is undefined
匿名函数中的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
为了表明它是与循环中使用的变量不同的变量。
闭包怎么样:
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) );
}
您可以使用回调将变量值传递给匿名函数,例如
myclass.foo(function(variable){
return function(){
console.log(variable);
}
})(variableValue);
);
for (var i = 0; i < somearray.length; i++)
{
myclass.foo({'arg1':somearray[i][0]}, function(somearray)
{
console.log(somearray[i][0]);
});
}
然后在方法 foo 中使用参数调用匿名函数。
所有函数/方法只能用作回调。当您调用回调函数时,您将变量传递给它。
var myclass = {
foo: function(params, callback){
// do some stuff
callback(variable1, variable1, variableN);
}
}