我们普通的函数在运行中是一次性的完成函数体内的语句,而生成器函数可以中途暂停执行 也可以恢复执行 他的声明方式是:
function* f() {
//...函数体
}
var scq1=f()//声明一个生成器
生成器有一个next()方法用来返回一个保持内部状态的生成器对象,比如:{value: 5, done: false},其中value是返回的值,done是生成器函数是否执行完成,
里面的关键字yield类似于return,但和return有些区别。
yield和return都可以返回一个保持内部状态的值,但是return会结束函数,让生成器对象的done状态变为true
我们用一个例子来展示:
function* f(l) {
var x = 10 + (yield l);
console.log(x) //第一次输出是NaN 第二次是15
var y = (yield x) + 5;
return y
}
var scq = f(5);
console.log(scq.next());//{value: 5, done: false}
console.log(scq.next());//{value: NaN, done: false}
console.log(scq.next());//{value: undefined, done: true}
var scq2 = f(5);
console.log(scq2.next());//{value: 5, done: false}
console.log(scq2.next(5));//{value: 15, done: false}
console.log(scq2.next(1));//{value: 6, done: false}