generator函数(简洁易懂)

Generator 前言:
Genertor 函数是es6 新增的一种异步编程的解决方案,语法和传统的函数完全不同;Genertor 函数的最大的特点就是可以交出函数的执行权(即暂停执行)。

Generator 基本概念:
对于Generator 函数也可以叫做生成器函数,

形式上: Generator函数是一个普通的函数,不过相对于普通函数多出了两个特征。一是在function关键字和函数明之间多了’*'号;二是函数内部使用了yield表达式,用于定义Generator函数中的每个状态。
语法上: Generator函数封装了多个内部状态(通过yield表达式定义内部状态)。执行Generator函数时会返回一个遍历器对象(Iterator(迭代器)对象)。也就是说,Generator是遍历器对象生成函数,函数内部封装了多个状态。通过返回的Iterator对象,可以依次遍历(调用next方法)Generator函数的每个内部状态。
调用上: 普通函数在调用之后会立即执行,而Generator函数调用之后不会立即执行,而是会返回遍历器对象(Iterator对象)。通过Iterator对象的next方法来遍历内部yield表达式定义的每一个状态。
Generator 方式使用:

 


上面代码一共调用了四次next方法。

第一次调用,Generator 函数开始执行,直到遇到第一个yield表达式为止。next方法返回一个对象,它的value属性就是当前yield表达式的值hello,done属性的值false,表示遍历还没有结束。

第二次调用,Generator 函数从上次yield表达式停下的地方,一直执行到下一个yield表达式。next方法返回的对象的value属性就是当前yield表达式的值world,done属性的值false,表示遍历还没有结束。

第三次调用,Generator 函数从上次yield表达式停下的地方,一直执行到return语句(如果没有return语句,就执行到函数结束)。next方法返回的对象的value属性,就是紧跟在return语句后面的表达式的值(如果没有return语句,则value属性的值为undefined),done属性的值true,表示遍历已经结束。

第四次调用,此时 Generator 函数已经运行完毕,next方法返回对象的value属性为undefined,done属性为true。以后再调用next方法,返回的都是这个值。

总结:
调用 Generator 函数,返回一个遍历器对象,代表 Generator 函数的内部指针。以后,每次调用遍历器对象的next方法,就会返回一个有着value和done两个属性的对象。value属性表示当前的内部状态的值,是yield表达式后面那个表达式的值;done属性是一个布尔值,表示是否遍历结束。
!!!制作不易,觉得不错请关注一下!!!!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Generator函数是一种特殊的函数,它是一个状态机,可以暂停执行并在需要时恢复执行。Generator函数的定义使用function关键字和一个星号(*),内部使用yield表达式来定义不同的内部状态。调用Generator函数后,函数并不会立即执行,而是返回一个指向内部状态的指针对象。通过调用这个指针对象的next()方法,可以逐步执行Generator函数内部的代码,并返回每个阶段的值和是否执行完毕的状态。 在Generator函数内部,可以使用yield*表达式来执行另一个Generator函数。yield*表达式可以将执行权交给另一个Generator函数,并在其执行完毕后再返回执行权给当前Generator函数Generator函数的数据交换可以通过调用next()方法传入参数来实现。在Generator函数内部,可以使用yield表达式来接收传入的参数,并返回相应的值。每次调用next()方法时,传入的参数会作为上一个阶段异步任务的返回结果,被函数体内的变量接收。 总结来说,Generator函数是一种特殊的函数,可以暂停执行并在需要时恢复执行。它通过yield表达式来定义不同的内部状态,并通过next()方法来逐步执行和控制函数的执行流程。yield*表达式可以在一个Generator函数内部执行另一个Generator函数。数据交换可以通过调用next()方法并传入参数来实现。 #### 引用[.reference_title] - *1* *3* [es6中的generator函数详解](https://blog.csdn.net/weixin_43638968/article/details/105475881)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Generator函数](https://blog.csdn.net/qq_43239667/article/details/123984997)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值