Skip to content

Instantly share code, notes, and snippets.

@narqo
Created May 6, 2015 21:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save narqo/80cf8ef871902903da9b to your computer and use it in GitHub Desktop.
Save narqo/80cf8ef871902903da9b to your computer and use it in GitHub Desktop.
How ES6 generators work? Based on http://x-team.com/2015/04/generators-work/
/* jshint esnext:true */
// native generators
function* random() {
var i = 0;
while(i++ < 1e5) {
yield Math.random();
}
}
var rndgen = random();
console.log(rndgen.next());
console.log(rndgen.next());
console.log(rndgen.next());
console.log(rndgen.next());
// fake generators
function random() {
var i;
function next(state) {
while(1) switch(state.prev = state.next) {
case 0:
i = 0;
case 1:
if(!(i++ < 1e5)) {
state.next = 4;
break;
}
state.next = 1;
return Math.random();
case 4:
case 'end':
state.done = true;
return;
}
}
var state = { next : 0, done : false };
return {
next : function() {
return { value : next(state), done : state.done };
}
};
}
var rndgen = random();
console.log(rndgen.next());
console.log(rndgen.next());
console.log(rndgen.next());
console.log(rndgen.next());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment