Корректировка кода для вывода чисел в обратном порядке

Нужно захватывать отдельное значение на каждой итерации и включить обе границы. Исходный код создаёт десять таймеров, каждый из которых позднее видит общий counter, равный 0.

Короткий ответ

Что ответить на собеседовании

Нужно захватывать отдельное значение на каждой итерации и включить обе границы. Исходный код создаёт десять таймеров, каждый из которых позднее видит общий counter, равный 0.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо поправить программу, чтобы в консоль последовательно выводились все целые числа от 10 до 0 включительно.

let counter = 10;

while (counter) {
  counter = counter - 1;
  setTimeout(() => {
    console.log(counter);
  });
}

Ответ

Нужно захватывать отдельное значение на каждой итерации и включить обе границы. Исходный код создаёт десять таймеров, каждый из которых позднее видит общий counter, равный 0.

for (let counter = 10; counter >= 0; counter--) {
  setTimeout(() => console.log(counter), 0);
}

У let в заголовке for создаётся отдельное связывание для каждой итерации, поэтому вывод будет 10, 9, …, 0. Если отложенное выполнение вообще не требуется, печатайте прямо внутри такого цикла. Для интервала между числами задайте задержку (10 - counter) * 1000; таймеры всё равно не гарантируют точность до миллисекунды.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее