美文网首页
2018-01-26 ES6 阮一峰教程摘记12 Generat

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

作者: 安乐_f487 | 来源:发表于2018-09-10 22:20 被阅读0次

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

    相关文章

      网友评论

          本文标题:2018-01-26 ES6 阮一峰教程摘记12 Generat

          本文链接:https://www.haomeiwen.com/subject/mxxwaxtx.html