一个例子理解ES6的yield关键字

yield是什么

  yield是ES6的新关键字,使函数暂停执行。

一个简单例子

  function *countASb() {
    console.log('Show0:');
    var a1 = yield console.log(1);
    console.log('Show1:',a1);
    var a2 = yield console.log(2);
    console.log('Show2:',a2);
    var a3 = yield console.log(3);
    console.log('Show3:',a3);
    var a4 = yield console.log(4);
    console.log('Show4:',a4);
    console.log('show:End');
  }
  var mArs = countASb(0);
  mArs.next('a1');
  mArs.next('a2');
  mArs.next('a3');
  mArs.next('a4');
  mArs.next('a5');

输出:

Show0:
1
Show1: a2
2
Show2: a3
3
Show3: a4
4
Show4: a5
show:End

很容易理解的几个点:

  • yield可以认为是暂停点。在执行generator函数的时候,在yield处会暂停。
  • 执行next,会从一个yield暂停点执行到下一个yield暂停点
  • (重点)next中的参数,会以上一个yield整体做为返回结果,参与执行。因此show1的结果是a2

posted on 2018-12-28 15:09  小忙  阅读(154)  评论(0编辑  收藏  举报

导航