Что такое генераторная функция (function*) и как работает yield?
Уровень: Senior
Ответ
Генератор – это особый вид функции, объявляемой с помощью `function*`, которая может приостанавливать своё выполнение и возобновлять его. Внутри генератора используется ключевое слово `yield` для выдачи промежуточного значения и паузы. Вызов генератора возвращает итератор (объект с методом next). При вызове `.next()` генератор выполняется до ближайшего yield и возвращает его значение, при следующем next – продолжится с места остановки. Если генератор завершается (достиг конца или return), done: true. Например: `function* gen() { yield 1; yield 2; }` – возвращает итератор, у которого первый next() даст {value:1, done:false}, второй – {value:2, done:false}, третий – {value: undefined, done:true}. Генераторы удобны для создания итераторов или реализции \"ленивых\" вычислений, а также могут использоваться для упрощения работы с асинхронным кодом (до появления async/await).