What are generator functions and how do they work?
Assesses fundamental understanding of JavaScript conventions, runtime behavior, and memory/performance considerations.
Hiring managers look for precision, avoidance of ambiguous jargon, and ability to explain trade-offs under real production conditions.
Generator functions are special functions that can pause execution and resume later, allowing them to produce a sequence of values over time instead of computing them all at once.
function* numberGenerator() {
yield 1;
yield 2;
yield 3;
}
const gen = numberGenerator();
console.log(gen.next()); // { value: 1, done: false }
console.log(gen.next()); // { value: 2, done: false }
console.log(gen.next()); // { value: 3, done: false }
console.log(gen.next()); // { value: undefined, done: true }
Key features:
- Lazy evaluation:
function* infiniteSequence() {
let i = 0;
while (true) {
yield i++;
}
}
- Two-way communication:
function* twoWay() {
const x = yield 'First';
yield `Got: ${x}`;
}
const gen = twoWay();
console.log(gen.next()); // { value: 'First', done: false }
console.log(gen.next('data')); // { value: 'Got: data', done: false }
- Delegating to other generators:
function* gen1() { yield 1; yield 2; }
function* gen2() {
yield* gen1();
yield 3;
}
Practical uses: iterating large datasets, implementing custom iterators, managing async flows (though async/await is now preferred).
Candidate Response Strategy & Interview Tips
- Start with a concise one-sentence summary: Deliver a direct, confident answer first before expanding into nuances.
- Demonstrate real-world trade-offs: Discuss where this approach excels and when you would avoid it in production systems.
- Discuss complexity & edge cases: Proactively explain time/space complexity or boundary conditions (null values, scale limits).
- Prepare for interviewer follow-ups: Technical hiring panels frequently probe deeper into concurrency, backward compatibility, or alternative libraries.