美文网首页
ES6学习笔记---yield到底是个啥

ES6学习笔记---yield到底是个啥

作者: 邓生的邓生 | 来源:发表于2018-12-22 09:33 被阅读0次

    引言

    ES6真是一个颠覆性的东西,随便一个特性就要琢磨半天,今天先来啃一啃yield

    正文

    yield到底是个啥呢,官方解释如下:

    The yield keyword is used to pause and resume a generator function.
    // yield这个关键字是用来暂停和恢复一个遍历器函数(的运行)的。
    

    所以呢,yield是个关键字,而且它只能用在遍历器函数里面,并且它有一个返回值{value: xxx,done: false},value就是当前遍历器暂停时返回的结果,done为false得时候,表示遍历器没遍历完,为true表示遍历已结束。

    function *foo(){
      var x = 1;
      y = yield(x+1);
      return;
    }
    var f = foo();
    

    遍历器函数一个重要的特点就是需要next()方法才能执行,所以上面f = foo()什么都没发生,所以再加一句

    f.next();
    

    f.next()是遍历器第一次执行,当遍历至关键字yield时,函数暂停,并返回yield后面的值,所以此时返回{value: 2,done: false}

    再执行一次f.next(),那么遍历器函数则从上次暂停的yield处开始,直接到return语句,所以结果是{value: undefined,done: true}

    next()可以接收参数,就是可以将传入的参数作用于上一次yield

    var f = function *(){
      var x = 1;
      var y = yield(x+1);
      var z = yield(x+y);
      return z;
    }
    var a = f.next();   // 2
    var b = f.next(2);  // 3
    var c = f.next(4);  // 4
    

    第一次执行暂停于yield(x+1),并返回于x+1等于2

    第二次执行,next()的参数2,就代替了上面的yield(x+1),所以y=2,那么暂停于第二个yieldyield(x+y)并返回x+y等于3
    同理,第三次执行z=4return z等于4

    最后说一下遍历器函数里面的for..of

    function *foo(){
      yield 1;
      yield 2;
      yield 3;
      return;
    }
    for(let v of foo()){
      console.log(v);
    }
    // 1
    // 2
    // 3
    

    for..of循环在遍历的时候,就是把每碰到一个yield,把yield后面表达式的值赋给v

    收工...

    相关文章

      网友评论

          本文标题:ES6学习笔记---yield到底是个啥

          本文链接:https://www.haomeiwen.com/subject/vqxikqtx.html