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/

10-09 01:26