function* f() { console.log(1); for (var i = 0; true; i++) { console.log('come in'); var reset = yield i; console.log(reset); if (reset) { i = -1; } } } // 这个时候并不会执行 1 var g = f(); /* 输出1 和 come in, 只会执行 yield 后面的语句, 并且暂停, 但是这个时候 reset 并没有赋值, 最终返回{value: 0, done: false} */ g.next(); /* reset 赋值 333; 输出 333; 输出 come in; 返回{value: 0, done: false} */ g.next(333);