Generator函数的语法
1.简介
该函数是ES6的一种异步编程的解决方案, 状态机(封装多个状态)、会返回一个遍历器对象
两个特征:
1. *(一般是紧跟在function后)
2. yield:定义不同的内部状态
yield表达式--暂停标志, 表达式是惰性求值的,只能用在generator函数中
与Iterator接口的关系
由于 Generator 函数就是遍历器生成函数,因此可以把 Generator 赋值给对象的Symbol.iterator属性,从而使得该对象具有 Iterator 接口
2. next()方法的参数
yield表达式本身没有返回值,或者说返回值是undefined
next方法可以带一个参数,该参数就会被当作上一个yield表达式的返回值。(第一次调用next方法时,参数是无效的)
3. for...of循环
可以自动遍历generator函数生成的Iterator对象,无需使用next()方法
return语句不会被遍历到
两种方法,遍历任意对象
4.Generator.prototype.throw()
在函数体外抛出错误,在函数体内捕获错误
5.Generator.prototype.return()
返回传入的参数,并终结遍历
6.next(),throw(),return()的共同点、比较
本质都是:让generator函数恢复执行,并替换yield表达式
7.yield * 表达式
在Generator函数内部调用另一个Generator函数,默认情况下是无效的
使用yield*表达式可以实现,例如:yield*foo();
8.作为对象属性的Generator函数
两种写法:
9.Generator函数的this
默认时,this不像正常那样能使用,new也不能使用
可以使用一个空对象call()来绑定Generator函数的this
10.含义
1)Generator与状态机
2)Generator与协程
3)Generator与上下文
11.应用
Generator函数的特点:暂停函数执行,返回任意表达式的值
1)异步操作的同步化表达--把异步操作放在yield表达式中,无需再使用回调函数
2)控制流管理
3)部署Iterator接口
4)作为数据结构(数组结构)
网友评论