Что выведет код Middle Итераторы и генераторы обновлено
finally генератора при break
Вопрос
Что выведет код? По строке на каждый вывод.
function* resource() {
try {
yield 'a';
yield 'b';
yield 'c';
} finally {
console.log('очистка');
}
}
for (const x of resource()) {
console.log(x);
if (x === 'b') break;
}
console.log('после цикла');
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: a, b, очистка, после цикла. При досрочном выходе из for...of цикл вызывает у итератора метод return().
Что выведет
a
b
очистка
после цикла
Разбор
При досрочном выходе из for...of цикл вызывает у итератора метод return(). Генератор завершается в точке, где стоял на yield 'b', и выполняет finally: печатается очистка. До 'c' дело не доходит. Только потом выполняется код после цикла. Так генераторы гарантированно освобождают ресурсы.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
return-значение генератора и повторный spread
Следующий вопрос
Ленивый бесконечный генератор