generator函数的理解

generator函数的理解

generator函数是ES6提供的一种异步编程的解决方案
一、异步编程
1、所谓“异步”,就是先执行第一段,转而执行其他的任务,等做好了准备再回来执行后面的。
2、编程方式主要有

1.回调函数
2.事件监听
3、发布/订阅者
4、Promise对象

3、所谓回调函数,就是把第二段单独写在一个函数里面,等到重新执行这个任务的时候,就直接调用这个函数即可。
回调函数的底部方式容易形成多重嵌套,造成“回调地狱”,callback hell。

二、什么是Generator?
语法上可以理解成是一个状态机,里面封装了很多的内部状态。
形式上它就是一个普通的函数。
整个generator函数就是一个封装的异步任务,或者说是异步任务的容器,异步操作需要暂停的地方都会使用yield语句。
generator函数的特性
1、function关键字和函数之间有一个星号(*),而且函数内部由yield表达式,表述不同的内部状态!!
2、调用generator函数之后,该函数并不执行,返回的也不是函数运行的结果,而是一个指向内部状态的指针对象。(执行内部我们需要调用next,会有{value:‘’,done:‘’}对象哦)

三、尝试定义一下generator函数

function* fn() {
    yield 'hello';
    yield 'world';
    yield 'end';
}
var f1 = fn();
console.log(f1);
console.log(f1.next());
console.log(f1.next());
console.log(f1.next());

我们可以看一下输出c:

{}
{ value: 'hello', done: false }
{ value: 'world', done: false }
{ value: 'end', done: false }

跟第二部分讲的一样,验证好了很开心!!
四、yield表达式和next()方法
generator函数调用之后返回的是一个遍历器对象(可能有点晦涩的说法),只有调用next方法才会去遍历下一个内部状态,所以其实提供了一种可以暂停执行的函数。
yield表达式就是暂停标志。
yield表达式后面的表达式,只有当调用next方法、内部指针指向该语句才会执行。

return方法和next方法的区别:

  • return终结遍历,之后的yield语句都会失效;next返回的是本次yield语句的返回值
  • return没有参数的时候,返回{value:undefine,done:true};next没有参数的时候返回本次yield语句的返回值。
  • return有参数的时候,覆盖本次yield语句的返回值,也就是返回{value:参数,done:true};而next有参数的时候会覆盖上一次yield语句的返回值,导致本次的返回值有可能改变(如果上一次yield参与运算的话)

for of循环
可以自动遍历generator函数时生成的iterator对象,且此时不需要调用next方法。以但next方法的返回对象的done属性为true,for…of循环就会中止,且不包含该返回对象

五、generator函数使用示例
等我写完传到GitHub~~传送门

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值