Выбор ответа Middle Итераторы и генераторы обновлено

Метод return у генератора

Вопрос

Генератор function* g() { yield 1; yield 2; } создан, но ещё ни разу не запускался. Что вернёт it.return(5) и что потом вернёт it.next()?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: { value: 5, done: true }, затем { value: undefined, done: true }. return(value) завершает генератор и возвращает { value, done: true }.

Варианты ответа

  1. { value: 1, done: false }, затем { value: 2, done: false }
  2. { value: 5, done: false }, затем { value: 1, done: false }
  3. { value: 5, done: true }, затем { value: undefined, done: true }правильный ответ
  4. TypeError: генератор ещё не запущен, сначала нужен next()

Разбор

return(value) завершает генератор и возвращает { value, done: true }. Если генератор был внутри try с finally, этот finally выполнится. После завершения любой next() возвращает { value: undefined, done: true }. Ошибки нет: завершить можно и не запущенный генератор. Именно return() вызывает for...of при break.

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

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