Рассмотрим следующий пример:
var cb = function (t) {
console.log('callback -->' + t);
};
for(var i = 0; i<3; i++) {
console.log(i);
setTimeout(function(){
cb(i);
},1000);
}
Вывод этого фрагмента кода:
0
1
2
callback ---> 3
callback ---> 3
callback ---> 3
Все работает так, как ожидалось, поскольку цикл помещает 3 вызова обратного вызова в цикл событий. К концу цикла for я == 3 и когда обратные вызовы выполняются, все они печатают 3, потому что они содержат ссылку на i, которая равна 3. Как можно улучшить этот фрагмент, поэтому, когда обратный вызов будет выполнен, он использует фактическое значение, которое было передано ему.
Выход должен быть:
callback ---> 1
callback ---> 2
callback ---> 3
Спасибо заранее.