To create a generator, we put an asterisk after the function keyword. If we execute this file again, you will see that nothing happens. Nothing is console.logged out. That is because when we call a generator, it returns an instance of itself but doesn't execute it.
To be more exact, we should call our generator create logger, and assign it to a variable called logger. To execute our generator, we call logger.next, which executes until the next block is over. If we run this, you'll see again that we logged start and we logged end.
To pause a generator, we use the yield keyword. The yield keyword tells the generator to stop executing at this point. If we run our file again, you will see this logs out start. The generator never reaches the console.log end. To execute the next block as well, we call logger.next again. As you can see, both start and end were logged out.
We can have as many of these yield keywords in our generator as we want. If we say console.log second block and third block here, and then call logger.next a bunch of times, if we execute this, you will see that everything executes as you expect.