Для цикла другое поведение с settimeout - PullRequest
0 голосов
/ 25 апреля 2018

Ниже приведены 2 сценария

for (var i=0; i<3; ++i)
{
   let num = i;
   setTimeout(function() { alert(num); }, 10);
}

Серия вывода: оповещения: 0,1,2

for (var i=0; i<3; ++i)
{
   // variables introduced in this statement
   // are scoped to the block containing it.
   let num = i;
   setTimeout(function() { alert(num); }, 10);
}

Серия вывода: оповещения: 0,2,1

Два идентичных кода, но с другим результатом.

Любая идея ???

1 Ответ

0 голосов
/ 25 апреля 2018

Я думаю, что ответом на ваш вопрос может быть характер использования очень низких таймаутов с setTimeout и негарантированного заказа.

См. Эту ссылку: https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers

Иобратите внимание на эту строку:

Этот API не гарантирует, что таймеры будут работать точно по расписанию.Следует ожидать задержек из-за загрузки процессора, других задач и т. Д.

Это означает, что в зависимости от обстоятельств ваши идентичные кодовые блоки действительно могут выдавать разные результаты.setTimeout также не гарантирует точное время, которое вы используете, особенно когда время ожидания очень мало (например, 10 мс, которые вы выбрали).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...