Skip to content

Instantly share code, notes, and snippets.

@b2whats
Forked from narqo/01native-gen.js
Created April 13, 2016 23:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save b2whats/f9d343bf39496672e74780570b0c4967 to your computer and use it in GitHub Desktop.
Save b2whats/f9d343bf39496672e74780570b0c4967 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