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?
To tylko dla wygody. Możesz wydrukować 'i' w pętli. – elclanrs