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
Не мисля, че може да се даде отговор без предоставяне на повече контекст. Къде е дефинирано y? Какво прави този snipped и защо изпълнявате 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