Що таке генератори в JavaScript?
Генератори — це функції, які можуть призупиняти виконання та продовжувати його пізніше. Вони надають більше контролю над потоком виконання, на відміну від звичайних функцій.
Генератори визначаються за допомогою function* і контролюються через метод .next().
Синтаксис генератора
javascript
function* generatorFunction() {
yield 'Перше значення';
yield 'Друге значення';
return 'Фінальне';
}
const gen = generatorFunction();
console.log(gen.next()); // { value: 'Перше значення', done: false }
console.log(gen.next()); // { value: 'Друге значення', done: false }
console.log(gen.next()); // { value: 'Фінальне', done: true }Як працює генератор
yield— ключове слово, яке призупиняє виконання та повертає значення..next()— продовжує виконання з останньогоyield.done: true— вказує, що генератор завершено.
Відмінності від звичайних функцій
| Особливість | Звичайні функції | Генератори |
|---|---|---|
| Повернення значень | Лише одне return | Багато yield |
| Проміжні стани | Ні | Так |
| Контроль потоку | Ні | Так |
Використання for..of | Ні | Так |
Генератори та ітератори
Генератор є ітератором, який дотримується протоколу Iterable. Це дозволяє використовувати його в циклі for...of.
javascript
function* range(start, end) {
for (let i = start; i <= end; i++) {
yield i;
}
}
for (const num of range(1, 5)) {
console.log(num); // 1, 2, 3, 4, 5
}Коли використовувати генератори?
Корисні для:
- Роботи з потоками даних — наприклад, генерація послідовностей.
- Ітерабельних структур — масиви, дерева, графи.
- Контролю виконання — наприклад, коли потрібна ручна покрокова обробка даних.
- Створення лінивих обчислень.
- Симуляції асинхронної поведінки до появи
async/await.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.