for (var i = 0; i < somearray.length; i++)
{
myclass.foo({'arg1':somearray[i][0]}, function()
{
console.log(somearray[i][0]);
});
}
如何将somearray或其索引之一传递给匿名函数?
somearray已经在全局范围内,但我仍然得到 somearray [i]是未定义的
最佳答案
匿名函数中的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
来表明它是与循环中使用的变量不同的变量。关于javascript - JavaScript匿名函数的参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3023874/