Rozważmy następujący przykład:JavaScript asynchroniczny callback i zakres
var cb = function (t) {
console.log('callback -->' + t);
};
for(var i = 0; i<3; i++) {
console.log(i);
setTimeout(function(){
cb(i);
},1000);
}
wyjściu tego fragmentu kodu jest:
0
1
2
callback ---> 3
callback ---> 3
callback ---> 3
wszystko działa zgodnie z oczekiwaniami, na pętli stawia 3 zwrotnego wywołuje pętlę zdarzeń. Pod koniec pętli for i == 3 i po wykonaniu wywołań wszystkie z nich wypisują 3, ponieważ zawierają łącze do i, które jest 3. W jaki sposób można poprawić ten fragment, więc gdy wywołanie zwrotne zostanie użyte, używa rzeczywistą wartość, która została mu przekazana.
Wyjście powinno być:
callback ---> 1
callback ---> 2
callback ---> 3
góry dzięki.
Wielkie dzięki. To proste i działa. –