Я пытаюсь увеличить счетчик постепенно. Следующие действия работают:
function _award(points){
var step = 1;
while(points){
var diff = Math.ceil(points / 10);
setTimeout( "_change_score_by("+diff+");" /* sigh */,
step * 25);
points -= diff;
step++;
}
}
Однако он использует неявный eval. Зло! Давайте вместо этого воспользуемся закрытием, не так ли?
function _award(points){
var step = 1;
while(points){
var diff = Math.ceil(points / 10);
setTimeout( function(){ _change_score_by(diff); },
step * 25);
points -= diff;
step++;
}
}
Очевидно, это не работает.Все созданные замыкания захватывают последнее значение diff
в функции - 1. Следовательно, все анонимные функции увеличивают счетчик на 1 и, например, _award ( 100)
вместо этого увеличит счет на 28.
Как я могу сделать это правильно?