Аргументы к функции JavaScript Anonymous

for (var i = 0; i < somearray.length; i++)
{
    myclass.foo({'arg1':somearray[i][0]}, function()
    {
        console.log(somearray[i][0]);
    });
}

Как пропустить somearray или один из его индексов в анонимную функцию? somearray уже находится в глобальной области, но я все еще получаю somearray [i] undefined

Ответы

Ответ 1

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

Ответ 2

Как насчет закрытия:

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) );
}

Ответ 3

for (var i = 0; i < somearray.length; i++)

{
    myclass.foo({'arg1':somearray[i][0]}, function(somearray)
    {
        console.log(somearray[i][0]);
    });
}

И затем в методе foo вызовите анонимную функцию с параметром.

Ответ 5

Все функции/методы могут использоваться только как обратные вызовы. Когда вы вызываете функцию обратного вызова, вы передаете ей переменные.

var myclass = {
  foo: function(params, callback){
    // do some stuff
    callback(variable1, variable1, variableN);
  }
}