- 发布于
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不能在普通函数中使用