Что выведет код 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 ошибок.