The answer is easy and simple:
pay attention, that when you use the latter, you both create an instance of the generator, you keep it safe in a variable that is capable of storing the newly created generator's STATE and then perform "next" upon it.
on the first example, each of your iterations, or advances
you re-create a whole new instance of the generator all over again and advance it only one time, afterwards the generator is "tossed away" so to say, since there is no pointer to keep it in, so that generator's STATE is not saved anywhere and it is gone.
the STATE of the generator is something that is saved per instance.
think about it this way - you can create 99999 generator instances, and advance only some of them
each of their STATEs is unique, and the result of performing "next" on any of them is independent of the others.