ES6 | Generator生成器

Generator函数是ES6引入的新特性,主要应用于异步编程,它允许函数暂停执行。Generator通过在函数名前加*标识,内部使用yield表达式定义不同状态。每次调用next()方法会返回一个包含value和done两个属性的对象,表示当前状态。yield的返回值可以通过next()的参数传递,实现数据的分段注入。
摘要由CSDN通过智能技术生成

Generator函数是ES6引入的新语法,主要用于异步编程,所以本质上Generator就是一个异步任务的容器,最大特点就是它可以暂停执行

它与普通函数的区别:

  • 函数定义时要在函数名前加*  
  • 函数内部使用yield来定义不同的状态

  • yeild命令是函数内部不同阶段的分界线
  • 调用函数时通过 next()方法获取当前状态
    • 每调用一次 next()  都会返回一个对象,表示当前的状态
      • value  表示当前值,也就是当前yield的返回值
      • done  表示函数是否结束,true表示函数执行完毕
function* xxfn(){
    yield 'a';
    yield 'b';
    yield 'c';
    return 'd end';
}
let _xxfn=xxfn();
// 第一个yield语句
console.log(_xxfn.next()); //a

// 第二个yield语句
console.log(_xxfn.next()); //b

// 第三个yield语句
console.log(_xxfn.next()); //c

// 第四个
console.log(_xxfn.next()); //d end  done为true

//再执行next  value会返回undefined

next()方法带参

  • next的参数会将上一个yield的返回值给覆盖掉
    • 第一个next是启动器,没有上一个next,故第一个next的参数是没有意义的
  • 可以通过next来分段注入数据
function* xxfn(){
    let n=1;
    let v = yield n + 22;
    console.log(v);
    yield ++n;
    yield ++n;
    return 'd end';
}
let _xxfn=xxfn();
// 第一个yield语句
// 返回 n + 22,暂停没有赋值给v
console.log(_xxfn.next()); // {vlaue:23,node:false}

// 第二个yield语句
// abc将上一个yield语句返回值覆盖掉了 
// 故v = yield 'abc' ==>  v ='abc'
_xxfn.next('abc'); // 'abc'

// 第三个yield语句
// 输入next会覆盖前一个next返回值,但是并不会修改n的值
console.log(_xxfn.next()); // {vlaue:3,node:false}

// 第四个
console.log(_xxfn.next()); //d end  done为true

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值