Что выведет код Middle Итераторы и генераторы обновлено

Передача значений в генератор через next

Вопрос

Что выведет код? По строке на каждый вывод.

function* dialog() {
  const name = yield 'Как зовут?';
  const age = yield 'Привет, ' + name + '! Сколько лет?';
  return name + ', ' + age;
}
const g = dialog();
console.log(g.next('игнор').value);
console.log(g.next('Аня').value);
const last = g.next(30);
console.log(last.value, last.done);

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: Как зовут?, Привет, Аня! Сколько лет?, Аня, 30 true. Первый next запускает генератор до первого yield; его аргумент 'игнор' некуда передать, он теряется.

Что выведет

Как зовут?
Привет, Аня! Сколько лет?
Аня, 30 true

Разбор

Первый next запускает генератор до первого yield; его аргумент 'игнор' некуда передать, он теряется. Второй next('Аня') делает 'Аня' результатом первого yield, то есть name, и генератор доходит до второго yield. Третий next(30) кладёт 30 в age, генератор выполняет return, и результат приходит с done: true.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.