Генератор (Generator) - это специальная функция в JavaScript, которая позволяет приостанавливать свое выполнение и возобновлять его позже с сохранением своего контекста выполнения. Генераторы используются для создания итераторов и облегчения работы с асинхронным кодом.

Генераторы объявляются с помощью ключевого слова function*, а не просто function, и содержат оператор yield, который возвращает значение и приостанавливает выполнение функции.

Пример использования генератора для создания итератора:

function* generateSequence() {
  yield 1
  yield 2
  yield 3
}
 
const iterator = generateSequence()
 
console.log(iterator.next()) // { value: 1, done: false }
console.log(iterator.next()) // { value: 2, done: false }
console.log(iterator.next()) // { value: 3, done: false }
console.log(iterator.next()) // { value: undefined, done: true }

В этом примере, мы объявляем генераторную функцию generateSequence(), которая возвращает последовательность чисел с помощью оператора yield. Затем мы получаем итератор с помощью вызова функции и используем метод next() для перебора элементов.

Генераторы могут также принимать аргументы и возвращать значения, что позволяет им генерировать последовательности на основе входных данных:

function* generateSequence(start, end) {
  for (let i = start; i <= end; i++) {
    yield i
  }
}
 
const iterator = generateSequence(1, 3)
 
console.log(iterator.next()) // { value: 1, done: false }
console.log(iterator.next()) // { value: 2, done: false }
console.log(iterator.next()) // { value: 3, done: false }
console.log(iterator.next()) // { value: undefined, done: true }

В этом примере, мы передаем аргументы start и end в генераторную функцию, которая затем использует цикл for и оператор yield для генерации последовательности чисел.

Генераторы позволяют управлять потоком выполнения в сложных сценариях, таких как обработка больших объемов данных или выполнение асинхронных операций. Они могут быть использованы для создания итераторов, облегчения работы с промисами и генерации последовательностей на основе ввода.


Назад