Что выведет код Junior Итераторы и генераторы обновлено
Ленивый бесконечный генератор
Вопрос
Что выведет код? По строке на каждый вывод.
function* naturals() {
let n = 1;
while (true) {
console.log('gen ' + n);
yield n++;
}
}
for (const n of naturals()) {
if (n > 2) break;
console.log('use ' + n);
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: gen 1, use 1, gen 2, use 2, gen 3. Генератор выполняет тело только по запросу: каждая итерация цикла вызывает next(), генератор печатает gen n и останавливается на yield.
Что выведет
gen 1
use 1
gen 2
use 2
gen 3
Разбор
Генератор выполняет тело только по запросу: каждая итерация цикла вызывает next(), генератор печатает gen n и останавливается на yield. Потом цикл печатает use n. Вывод чередуется. На третьем шаге генератор успевает напечатать gen 3, а цикл видит 3 > 2 и выходит. Бесконечный while (true) не вешает программу, потому что выполняется лениво.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
finally генератора при break
Следующий вопрос
Передача значений в генератор через next