Javascript: функция рефакторинга вне цикла

Итак, JSHint говорит мне, что я не должен создавать функции внутри цикла. Затем я обычно делаю функцию вне цикла.

Но теперь у меня есть часть, где это сложнее:

for (r=0;r<x;r++) {
    for (c=0;c<y;c++) {
        var arr = [c,r];
        setTimeout( (function(arr) { return function() { doSomething(arr); };})(arr), 50+c*550 + r*230 );
    }
}

как я могу реорганизовать эту часть, чтобы не получать предупреждение JSHint?


person clamp    schedule 06.07.2012    source источник
comment
Я не думаю, что ответ может быть дан без предоставления большего контекста. Где у определяется? Что делает этот фрагмент, и почему вы выполняете settimout в цикле (который сам по себе выглядит как запах кода)?   -  person helpermethod    schedule 06.07.2012
comment
x и y - просто некоторые целочисленные переменные. что плохого в setTimeouts в цикле?   -  person clamp    schedule 06.07.2012


Ответы (1)


Это просто:

for (r=0;r<x;r++) {
    for (c=0;c<y;c++) {
        var arr = [c,r];
        setTimeout( proxy(arr), 50+c*550 + r*230 ); 
    }
}

function proxy(arr){
    return function(){
        doSomething(arr);
    };
}
person Engineer    schedule 06.07.2012