Нужно захватывать отдельное значение на каждой итерации и включить обе границы. Исходный код создаёт десять таймеров, каждый из которых позднее видит общий 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; таймеры всё равно не гарантируют точность до миллисекунды.