Generators: function* and yield
What a generator gives you
A function* (note the asterisk) returns a generator — an object that's BOTH an iterator AND iterable. Each yield produces the next value; execution pauses there and resumes on the next .next() call.
function* range(from, to) {
for (let n = from; n <= to; n++) yield n;
}
for (const n of range(1, 3)) console.log(n); // 1, 2, 3
[...range(1, 3)]; // [1, 2, 3]Same result as the Symbol.iterator object in C6-03 — five lines instead of fifteen.
Yielding sequences
yield can be called any number of times, in any pattern:
function* greet() {
yield "hi";
yield "there";
yield "friend";
}Each yield is a checkpoint. The generator's runtime saves the function's local state between calls — that's why you can have an explicit for loop with yield inside it.
return inside a generator
return value finishes the generator immediately. Subsequent .next() calls return { value: undefined, done: true }.
Sign up to start coding
Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial — card required, cancel anytime.
Sign up — free trial →First 10 lessons in each track are free. No card needed for those.