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
, чтобы показать, что это переменная, отличная от той, которая используется в цикле.