for (var i=1; i<=5; i++) {
setTimeout( function timer(){
console.log( i );
}, i*1000 );
}
Natknąłem się na dosyć książkowy przykład i mam mały problem.
To co mi się wydaje, to:
-
i
jako drugi argumentsetTimeout
normalnie się zmienia, ponieważ nie występuje tutaj domknięcie, czyli 1 - 2 - 3 itd. - setTimeout zaczyna się wykonywać od razu w momencie dojścia do niego przy każdej iteracji pętli, czyli od tego momentu jest liczony czas,
pętla wykonuję się prawie natychmiast, więc setTimeout'y prawie równolegle się rozpoczynają z czasaim 1000ms 2000ms 3000ms itd., przez co co jedna sek otrzymujemy 6 w konsoli.
Tylko dlaczego skoro funkcja startuje w momencie dojścia do niej to i
nagle jest brane ze skończonej pętli. Czy to jest tak, że najpierw niby jest przejście przez pętle, delklaracje tego wyszstkiego wtedy i = 6 i dopiero później wszystkie setTimeouty startują na raz. Jak to jest, bo nie jestem w stanie tego pojąć. Wiem, że trochę pomieszałem, ale byłbym wdzięczny gdyby ktoś mi przedstawił wykonanie się tej pętli (albo chociaż 1 iteracji) tak jak to robi komputer.
Chyba coś wymyśliłem. Poprawcie mnie, jezeli się mylę. Kod wcześniejszy można zapisać tak:
var i;
for (i=1; i<=5; i++) {
setTimeout( function timer(){
console.log( i );
}, i*1000 );
}
I jest zmienną "globalną" przy takim założeniu. Po przejściu przez pętlę wynosi 6. Z tego wynika, że w pętli deklarujemy funkcję, a po skończonej pętli wszystko dopiero rusza, tak?