Вернуться к уроку

Что выведет setTimeout?

важность: 5

В коде ниже запланирован запуск setTimeout, а затем запущена тяжёлая функция hardWork, выполнение которой занимает более долгое время, чем интервал до срабатывания таймера.

Когда сработает setTimeout? Выберите нужный вариант:

  1. До выполнения hardWork.
  2. Во время выполнения hardWork.
  3. Сразу же по окончании hardWork.
  4. Через 100 мс после окончания hardWork.

Что выведет alert в коде ниже?

setTimeout(function() {
  alert( i );
}, 100);

var i;

function hardWork() {
  // время выполнения этого кода >100 мс, сам код неважен
  for (i = 0; i < 1e8; i++) hardWork[i % 2] = i;
}

hardWork();

Ответы:

  • alert выведет 100000000.
  • 3, срабатывание будет после окончания работы hardWork.

Так будет потому, что вызов планируется на 100 мс от времени вызова setTimeout, но функция выполняется больше, чем 100 мс, поэтому к моменту ее окончания время уже подошло и отложенный вызов выполняется тут же.