First of all, what the heck does mean? As a non-native English speaker, I found it very confusing. So based on The , " " is: yield Cambridge Dictionary yield "To produce something useful such as information or evidence." Here are some examples of how to use the word: "Knowing about our past does not automatically yield solutions to our current problems. yield results/benefits: The search for truth is beginning to yield fruitful results." "A letter found by the FBI last week may yield new clues." So, now that we know what the word means, let's talk JavaScript. are a kind of function that can stop its execution midway and start again from the same point where it stopped after some time. They are basically a combination of and . Generators special functions iterators When you call a generator, it returns an object , where is the value to be and is a Boolean that tells the generator if the function will yield a value or . {value: value, done: true|false} value yielded done .next() undefined To create a generator function we need to use the : * function* generator(i){ ... } This is because tells JavaScript that an iterator object is going to be returned and unlike regular functions, it doesn't start its execution straight away. * Let's have a look at how to use generator functions: { i + ; i + ; i + ; } generate = generator( ); .log(generate.next()); .log(generate.next()); .log(generate.next()); .log(generate.next()); * ( ) function generator i yield 10 yield 20 yield 50 const 15 console // {value: 25, done: false} console // {value: 35, done: false} console // {value: 65, done: false} console // {value: undefined, done: true} When we call the function, the execution starts. It executes until it finds the first statement and yields the value. When called again, will resume the generator function until it finds the next statement and this cycle ends when there are no more , finishing with . next() yield next() yield yields {value: undefined, done: true} A statement in a generator will make the generator finish its execution (like any other function), setting the property and all other after the will be : return done true yields return undefined { i + ; i + ; ; i + ; } generate = generator( ); .log(generate.next()); .log(generate.next()); .log(generate.next()); * ( ) function generator i yield 10 yield 20 return yield 50 const 15 console // {value: 25, done: false} console // {value: 35, done: false} console // {value: undefined, done: true} The same applies if an error is thrown: the following will all be . yields undefined You can also yield another generator function by using : yield* { ; } { * func1(); } iterator = func2(); .log(iterator.next()) .log(iterator.next()) * ( ) function func1 yield 73 * ( ) function func2 yield const console // {value: 73, done: false} console // {value: undefined, done: true} Advantages : it evaluates the value only when there's need for it. Lazy loading : as we only evaluate values when needed, less memory for storing those values is needed. Memory efficient Risks like arrays and other data structures. Generators don’t provide random access . So you can't iterate through the values again. Generators provide one-time access Why Use Generators? I honestly didn't find any use cases for my own code. Researching the internet, I found an interesting article on dev: . Use-Cases For JavaScript Generators Using JavaScript generators to optimize APIs Sources - - MDN freeCodeCamp