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

return-значение генератора и повторный spread

Вопрос

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

function* nums() {
  yield 1;
  yield 2;
  return 3;
}
const it = nums();
console.log([...it].join(','));
console.log([...it].length);
const it2 = nums();
it2.next();
it2.next();
console.log(JSON.stringify(it2.next()));

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

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

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

Коротко

Код выведет: 1,2, 0, {"value":3,"done":true}. Spread забирает значения, пока done равно false.

Что выведет

1,2
0
{"value":3,"done":true}

Разбор

Spread забирает значения, пока done равно false. Значение из return приходит вместе с done: true, поэтому spread его отбрасывает: 1,2. Генератор одноразовый, второй spread получает исчерпанный итератор: 0. Вручную же return-значение видно: третий next() возвращает { value: 3, done: true }.

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

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