Próbuję uruchomić wiele timerów, biorąc pod uwagę listę zmiennych elementów. Kod wygląda mniej więcej tak:Jak korzystać z funkcji setInterval wewnątrz pętli for
var list = Array(...);
for(var x in list){
setInterval(function(){
list[x] += 10;
console.log(x + "=>" + list[x] + "\n");
}, 5 * 1000);
}
Problem z powyższego kodu jest to, że jedyną wartością jest aktualizowany jest element na koniec listy, pomnożonej przez liczbę elementów na liście.
Czy ktoś może zaoferować rozwiązanie i pewne wyjaśnienie, więc wiem, dlaczego zachowuje się w ten sposób?
Tak, mogę polecić przeczytanie tego artykułu: http://blog.morrisjohns.com/javascript_closures_for_dummies. Co więcej, setTimeout w pętli może nie być tym, co chce zrobić, ponieważ wszystkie wywołania zwrotne zostaną uruchomione w tym samym czasie, nie będą rozłożone. – SoWeLie
OP nie "potrzebuje zamknięcia", wręcz przeciwnie - ma zamknięcie na * x *, którego należy unikać (co faktycznie robi twoja odpowiedź). Zachowuje jednak zamknięcie na * liście *. – RobG