es6-generator学习笔记

1.在这里插入图片描述

任意一个对象的Symbol.iterator方法,等于该对象的遍历器生成函数,调用该函数会返回该对象的一个遍历器对象。

所以a[Symbol.iterator]().next()方法等于a的next()方法,所以执行generator函数生成的对象也是可以遍历的,可以使用扩展运算符和for of

在这里插入图片描述

在这里插入图片描述

额外:在这里插入图片描述

对象有 for in方法 没有for of方法,for of方法需要对象实现iterator方法

对象iterator方法简单实现:

在这里插入图片描述

使用generator实现对象的iterator

在这里插入图片描述

在这里插入图片描述

调用普通函数函数体会直接执行,而generator函数调用了next()方法,函数体才会真正执行

3.yield

在这里插入图片描述

next()能传参数,参数为yield右边表达式的值,generator生成的迭代器每执行一次next(),都会返回一个带有键value和done的对象,执行next()会执行这次yield右边的语句,然后停在此yield处,返回的的value值为yield右边式子的值,done为false代表下面还有yield可以执行。

在这里插入图片描述

next()参数是给上一次yield赋值

4.在这里插入图片描述

如果想第一次执行就取得yield的值可以在使用闭包。

闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。

5.throw

throw方法抛出的错误要被内部捕获,前提是必须至少执行过一次next方法。

throw抛出错误后会执行下一次yield后代码

在这里插入图片描述

在这里插入图片描述

如果generator函数内部没有捕获,那么相当于generator函数执行完毕,返回一个{value:undefined,done:true}的对象

6.return

return函数导致generator停止遍历,value值为return传递的值,如果没有传值便为undifined,如果try catch捕获后有finally语句,不会终止,可以继续next(),但是最后完成状态的值为return传入的值

在这里插入图片描述

next()throw()return()这三个方法本质上是同一件事,可以放在一起理解。它们的作用都是让 Generator 函数恢复执行,并且使用不同的语句替换yield表达式。

在这里插入图片描述

generator函数内部也可以使用return语句,并且只有第一个return语句会生效,如同外部迭代器对象调用return一样,返回一个done为true的对象,表示遍历完成了,再调用next(),返回的value都为undefined。

6.yield * 能将一个带有迭代器的对象遍历并且带有yield
在这里插入图片描述

obj是实现了迭代器的对象
在这里插入图片描述

7.状态机

在这里插入图片描述

8.thunk函数就是将一个多参数的函数转化为一个只接受回调函数作为参数的单参数函数。

以下为实现自动执行器之前的铺垫

在这里插入图片描述

自动执行器:

在这里插入图片描述

9.co模块 npm i co
然后co(generator函数)就可以自动执行generator函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值