function *foo(x) {
var y = 2 * (yield (x + 1));
var z = yield (y / 3);
return (x + y + z);
}
var it = foo( 5 );
// 启动generator,传入值会被忽略,传出值为第一个yield表达式的计算值
console.log( it.next().value);
// 传入值为12,将第一个yield表达式的值设为12,
// 传出值为第二个yield表达式的计算值
console.log( it.next( 12 ).value);
// 传入值为13, 将第二个yield表达式的值设为13,
// 传出值为return的结果:
// x = 5
// y = 2*12 =24
// z = 13
console.log( it.next( 13 ).value);