生成器函数(generator)

简介

生成器函数是一个函数名前面带 * 的函数是es6提供的一种异步编程解决方案,语法行为与传统函数完全不同
例:

function* 函数名(){}

特点

1、函数生成器特点是函数名前面有一个‘*’
2、通过调用函数生成一个控制器
3、调用next()方法开始执行函数
4、遇到yield函数将暂停 5、再次调用next()继续执行函数

yield

yield是JS为了解决异步调用的命令。表示程序执行到这里会交出执行权,等待结果返回。它需要在协程Generator 函数中运行

实例

1.yield

/* yield是属于生成器函数的一个关键词,yield关键字就像return一样但他实际返回一个IteratorResult对象
它有两个属性,value和done。value属性是对yield表达式求值的结果,而done是false,表示生成器函数尚未
完全完成。*/
function* putout_id(){
    let ID=1;
    ++ID;
    ++ID;
    while(ID)
    {
        yield ID++;
    }
}
const lie=putout_id();
const next1={ID:lie.next().value}; 
const next2={ID:lie.next().value};
console.log(next1.ID); // 3
console.log(next2.ID); // 4

2.yield*
乍一看上去好似只比yield多了个星号,但他的作用就在于可以在生成器函数中嵌套生成器函数,并使其自动迭代.
具体函数如下:

function* putout_id() {
  let ID = 1;
  yield* other();
  while (ID) {
    yield ID;
  }
}
function* other() {
  yield "a";
  yield "b";
}
const lie = putout_id();
const next1 = { ID: lie.next() };
const next2 = { ID: lie.next() };
const next3 = { ID: lie.next() };
const next4 = { ID: lie.next() };
console.log(next1.ID); // {value": "a",done: false}
console.log(next2.ID); // {value: "b",done: false}
console.log(next3.ID); // {value: 1,done: false}
console.log(next4.ID); // {value: 1,done: false}

输出结果为a和b如我们所想的迭代的结果

未加 *

function* putout_id() {
  let ID = 1;
  yield other();
  while (ID) {
    yield ID;
  }
}
function* other() {
  yield "a";
  yield "b";
}
const lie = putout_id();
const next1 = { ID: lie.next() };
const next2 = { ID: lie.next() };
console.log(next1.ID); // {value: other,done: false}
console.log(next2.ID); // {value: 1,done: false}

很显然,未加星号的无法自动迭代,输出为一个名为other生成器函数对象

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值