Функция-генератор — это специальная функция, объявленная с синтаксисом function*. В отличие от обычных функций, она может приостанавливать и возобновлять выполнение, что идеально подходит для ленивой генерации последовательностей значений.
yield приостанавливает выполнениеКлючевое слово yield действует как точка паузы. Когда выполнение достигает yield, функция:
yield, вызывающему коду.next().next() возобновляет выполнениеВызов .next() на генераторе возвращает объект с двумя свойствами:
value — значение, переданное в yielddone — false, если ещё есть значения, true, когда генератор завершаетсяfunction* idMaker() {
let id = 0;
while (true) {
yield id++;
}
}
const gen = idMaker();
gen.next(); // { value: 0, done: false }
gen.next(); // { value: 1, done: false }
gen.next() выполняется до первого yield, возвращает 0, затем приостанавливаетсяgen.next() возобновляет выполнение с того же места, возвращает 1, затем снова приостанавливаетсяdone здесь никогда не становится trueГенераторы дают тебе точный контроль над потоком выполнения. Ключевое слово yield приостанавливает функцию, сохраняя состояние, а .next() возобновляет её — это позволяет эффективно генерировать данные по требованию, не загружая всё в память сразу.
Когда функция-генератор встречает yield, она немедленно возвращает значение и полностью завершает выполнение до следующего вызова .next().
Новый — ещё не проверен сообществом
Вы