2018-01-26 ES6 阮一峰教程摘记12 Generat

2018-09-10  本文已影响0人  安乐_f487

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)作为数据结构(数组结构)

上一篇下一篇

猜你喜欢

热点阅读