Генератор (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
для генерации последовательности чисел.
Генераторы позволяют управлять потоком выполнения в сложных сценариях, таких как обработка больших объемов данных или выполнение асинхронных операций. Они могут быть использованы для создания итераторов, облегчения работы с промисами и генерации последовательностей на основе ввода.