美文网首页
yield执行流程

yield执行流程

作者: yongningfu | 来源:发表于2017-03-26 10:39 被阅读0次

yield 执行流程

var g = function* () {
    console.log('before yield');
    yield console.log('yield');
    console.log('after yield');
};

var i = g();
console.log('before next');
i.next();
console.log('after next');

上面的执行流程将会如何输出呢?

"before next"
"before yield"
"yield"
"after next"

说明了,generator的执行流程为 g() 实际不会执行函数,next()的话,会从函数之前断开的yeild左表达式或者从函数最开始位置即上文中的before yeild,开始执行,直到执行到 yield 右表达式,然后右表达式执行完成后,程序从这个函数这里断开,并把右表达式的结果返回,赋给next()执行结果,然后从next()往下执行。

所以 上面的流程可以总结为

  1. next()调用, 程序返回对应的generator函数并执行
  2. 会从generator函数的 上一个断开的yield 左表达式开始执行,包括把yield的返回值赋值给 yield 左侧的变量,或者从函数的最初开始执行, 直到执行到下一个yield右表达式,并把右表达式的结果返回,程序从这里断开
  3. next()返回的对象的value值就是 yield右表达式的的结果值
var g = function* () {

    yield console.log('first yielding');
    console.log('after first yield');
    yield console.log('secord yielding');
    console.log('after yield');
};

var i = g();
console.log('before first next');
i.next();
console.log('after first next');
i.next();

利用上面结论,非常容易就得到下面的结果了

"before first next"
"first yielding"
"after first next"
"after first yield"
"secord yielding"

关键点是 第一个next执行后,抛出第一个first yielding, 然后又返回next, 执行after first next

相关文章

  • yield执行流程

    yield 执行流程 上面的执行流程将会如何输出呢? 说明了,generator的执行流程为 g() 实际不会执行...

  • ES6——Generator

    ES6 新引入了 Generator 函数,可以通过 yield 关键字,把函数的执行流挂起,为改变执行流程提供了...

  • Generator 函数

    ES6 新引入了 Generator 函数,可以通过 yield 关键字,把函数的执行流挂起,为改变执行流程提供了...

  • python中的yield与return

    yield与return的功能都是返回程序执行结果,但是yield返回执行结果并不中断程序执行,return在返回...

  • with与“上下文管理器”

    先做yield之前的,把返回值给f, 然后执行 f.write部分的内容,,然后执行yield之后的内容

  • Java——yield()作用

    Thread.yield()方法作用是:暂停当前正在执行的线程对象,并执行其他线程。 yield()应该做的是让当...

  • Python篇-生成器( 二 )利用生成器提高代码效率

    一 : yield执行规律 从上一次位置执行开始,到下一个yield之前结束. 再次__next__() 二 : ...

  • 理解geneartor

    value 值指yield后面 执行后 表达式的值,例如‘hello’ m 是执行后返回的值 即yield+表达式...

  • Generator 函数的语法

    函数定义 就是function* name 调用就是.next 每次执行到yield就停止,直接返回yield的内...

  • 使用生成器来实现斐波那契数列

    生成器函数通常和 yield 关键字同时使用。函数执行到每个 yield 时都会中断并返回 yield 的右值(通...

网友评论

      本文标题:yield执行流程

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