Javascript Закрытие вопроса - PullRequest
       6

Javascript Закрытие вопроса

0 голосов
/ 24 апреля 2010

Почему следующий код выводит "0 5 10 15 20 ... 100"?

(function () {
for ( var i = 100; i >= 0; i -= 5) {
    (function() {
        var pos = i;
        setTimeout(function() {
            console.log(" pos = " + pos);
        }, (pos + 1)*10);
    })();
}
})();

Я объявляю pos = i, который должен быть в порядке убывания. Этот код возник из функции Джона Резига fadeIn () в его книге «Техники JavaScript».

1 Ответ

7 голосов
/ 24 апреля 2010

Вы регистрируете таймауты в правильном порядке, проблема в том, что они рассчитаны в порядке их значения, поэтому значение 10 будет напечатано через 100 мс, значение 100 через 1000 мс и т. Д.

Таким образом, вам нужно изменить расчет времени, чтобы вычесть максимальное значение (в данном случае 100)

(function () {
for ( var i = 100; i >= 0; i -= 5) {
    (function() {
        var pos = i;
        setTimeout(function() {
            console.log(" pos = " + pos);
        }, (100 - pos + 1)*10); // note the subtraction here
    })();
}
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...