Аргументы анонимной функции JavaScript

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

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

14
задан Anurag 11 June 2010 в 18:49
поделиться

4 ответа

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

31
ответ дан 1 December 2019 в 07:05
поделиться

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

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) );
}
10
ответ дан 1 December 2019 в 07:05
поделиться
for (var i = 0; i < somearray.length; i++)

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

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

0
ответ дан 1 December 2019 в 07:05
поделиться

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

var myclass = {
  foo: function(params, callback){
    // do some stuff
    callback(variable1, variable1, variableN);
  }
}
-2
ответ дан 1 December 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: