2013-06-04 10 views
5

Czytałem slajdy John Resig 'John Resig.Możliwe rozwiązanie funkcji zapętlania funkcji

Jak doszedłem do slide-27 John zawiera quiz, jak na poniżej:

QUIZ: Jak możemy realizować pętli z wywołania zwrotnego?

function loop(array, fn){ 
    for (var i = 0; i < array.length; i++) { 
    // Implement me! 
    } 
} 
var num = 0; 
loop([0, 1, 2], function(value){ 
    assert(value == num++, "Make sure the contents are as we expect it."); 
    assert(this instanceof Array, "The context should be the full array."); 
}); 

starałem się wdrożyć, i wpadł na następujący kod:

function loop(array, fn){ 
    for (var i = 0; i < array.length; i++) { 
    fn.call(array, array[i]); 
    } 
} 
var num = 0; 
loop([0, 1, 2], function(value){ 
    assert(value == num++, "Make sure the contents are as we expect it."); 
    assert(this instanceof Array, "The context should be the full array."); 
}); 

Byłem szczęśliwy, że wszystko działa, i chętny, aby zobaczyć następny slajd, aby porównać ją z roztworu John dostarczy w przyszłym ślizgać się.

ale w następnym slajdzie John przekazały następujące rozwiązanie:

function loop(array, fn){ 
    for (var i = 0; i < array.length; i++) 
    fn.call(array, array[i], i); 
} 
var num = 0; 
loop([0, 1, 2], function(value, i){ 
    assert(value == num++, "Make sure the contents are as we expect it."); 
    assert(this instanceof Array, "The context should be the full array."); 
}); 

do funkcji fn on przekazany do loop() dodał inny parametr i.

Które sprawia, że ​​zastanawiam się, dlaczego inny parametr jest wymagany?

+0

To tylko dla wygody. Możesz wydrukować 'i' w pętli. – elclanrs

Odpowiedz

1

W normalnej pętli for ciało ma dostęp do indeksu i. Jeśli rozwiązanie do oddzwaniania ma zastąpić to rozwiązanie, powinno ono również udostępniać te informacje. Przydaje się na przykład do tworzenia niepowtarzalnych identyfikatorów. Dlatego przekazujemy go jako parametr.

Powiązane problemy