Generator
基本概念
Generator可以理解为一个状态机,封装了多个内部状态
执行Genertaor函数会返回一个遍历器对象。
特征
function
关键字和函数名之间有一个*- 函数内部使用
yield
语句,用来定义不同状态。
123456789101112131415161718function* 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 }Generator
函数调用不会执行,返回的是指向内部状态的指针对象。调用遍历器对象的
next
方法,使指针移向下移状态。每次调用
next
内部指针(执行流)从函数头部或者上次停止地方开始执行,直到下一个yield
语句(或return
)。
yield语句
next
调用时- 执行到
yield
语句,暂停执行后面操作yield
后表达之,作为返回的对象和的value
- 再次调用
yield
继续向下执行,直到下一个yield
语句 - 执行到
return
语句,将return
语句后表达式的值,作为返回对象的value
- 函数没有
return
,返回value
为undefined
yield
语句后的表达式,调用时才会执行(惰性求值Lazy Evaluation)
- 执行到
yield
与return
- 都返回之后表达式的值
- 一个函数只能有一个
return
,可以多个yield
yield
不能在普通函数中使用