- 发布于
Generator语法
- Authors
- Name
- 田中原
Generator学习
目录
Generator
基本概念
Generator可以理解为一个状态机,封装了多个内部状态
执行Genertaor函数会返回一个遍历器对象。
特征
function
关键字和函数名之间有一个*- 函数内部使用
yield
语句,用来定义不同状态。
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 }
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
不能在普通函数中使用