Рассмотрим следующий пример:JavaScript асинхронной обратного вызова и область применения
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 i == 3, и когда обратные вызовы выполняются, все они печатают 3, потому что они содержат ссылку на i, которая равна 3. Как можно улучшить этот фрагмент, чтобы при выполнении обратного вызова он использовал фактическое значение, которое было передано ему.
Вывод должен быть:
callback ---> 1
callback ---> 2
callback ---> 3
Спасибо заранее.
Большое спасибо. Это просто и работает. –