Generator函数是一个状态机,因为它内部封装了多个状态,也是一个遍历器对象生成函数,因为它返回一个遍历器对象。遍历器对象有指向Generator内部状态的指针,每次调用它的next方法就会返回一个包含value和done两个属性的对象,value是所指向的generator函数里面yield或return后面表达式的值,done是表示遍历是否结束的布尔值
“yield
表达式本身没有返回值,或者说总是返回undefined
。next
方法可以带一个参数,该参数就会被当作上一个yield
表达式的返回值”
for of 遍历Generator返回的遍历器对象时不包括return返回值
yield console.log('hello')在next()时会打印字符串,value值为undefined
Generator返回的遍历器对象除了next还有throw和return方法,“next()
、throw()
、return()
这三个方法本质上是同一件事,可以放在一起理解。它们的作用都是让 Generator 函数恢复执行,并且使用不同的语句替换yield
表达式”
yield*相当于for...of的简写
可以将Generator函数包装成构造函数
function* gen(){this.a=1;yield 1;}
function Gen(){
return gen.call(gen.prototype)
}
var ite=new Gen();
带引号的直接引自原文
http://es6.ruanyifeng.com/#docs/generator