利用generator可以多次输出:
function* gtor(x)
{
yield x+1;
yield x+2;
// return x+3;
}
var f=gtor(3);
console.log(f.next());
console.log(f.next());
console.log(f.next());
console.log(f.next());
for(var x of gtor(3))
{
console.log(x);
}
{ value: 4, done: false }
{ value: 5, done: false }
{ value: undefined, done: true }
{ value: undefined, done: true }
4
5
有return的情况:
function* gtor(x)
{
yield x+1;
yield x+2;
return x+3;
}
var f=gtor(3);
console.log(f.next());
console.log(f.next());
console.log(f.next());
console.log(f.next());
for(var x of gtor(3))
{
console.log(x);
}
{ value: 4, done: false }
{ value: 5, done: false }
{ value: 6, done: true }
{ value: undefined, done: true }
4
5
总结:用next和for循环取值是有区别的,第一种连return也取了,done是true,for循环则不会取return的值。