Generators are functions that can pause execution and resume later, yielding multiple values over time. They're defined with function* syntax and return an iterator. Use cases include lazy evaluation, infinite sequences, and custom iterables.
Generator Basics:
function* syntaxyield to pause and emit valuesnext() methodnext(value)Iterator Protocol:
next() returns { value, done }Use Cases:
function* numberGenerator() {
console.log('Starting');
yield 1;
console.log('After first yield');
yield 2;
console.log('After second yield');
yield 3;
console.log('Ending');
return 'done';
}
const gen = numberGenerator();
console.log(gen.next()); // 'Starting', { value: 1, done: false }
console.log(gen.next()); // 'After first yield', { value: 2, done: false }
console.log(gen.next()); // 'After second yield', { value: 3, done: false }
console.log(gen.next()); // 'Ending', { value: 'done', done: true }
console.log(gen.next()); // { value: undefined, done: true }