第16章 Generator 函数的语法
16.1.1
function* helloWorldGenerator() {
yield 'hello';
yield 'world';
return 'ending';
}
var hw = helloWorldGenerator();
hw.next()
// {value: "hello", done: false}
hw.next()
// {value: "world", done: false}
hw.next()
// {value: "ending", done: true}
hw.next()
// {value: undefined, done: true}
16.1.2
function* gen() {
yield 123 + 456;
}
function* f () {
console.log('执行了!');
}
var generator = f();
setTimeout(function () {
generator.next()
}, 2000);
16.1.3
var myIterable = {};
myIterable(Symbol.iterator) = function* () {
yield 1;
yield 2;
yield 3;
}
[..myIterable] // [1, 2, 3]
function* gen() {
console.log("gen");
}
var g = gen();
g[Symbol.iterator]() === g
16.2
function* f() {
for(var i = 0; true; i++) {
var reset = yield i;
if(reset) {
i = -1;
}
}
}
var g = f();
g.next();
g.next();
g.next(true);
function* foo(x) {
var y = 2 * (yield (x + 1));
var z = yield (y / 3);
return (x + y + z);
}
var a = foo(5);
a.next();
a.next();
a.next();
var b = foo(5);
b.next()
b.next(12)
b.next(13);