• 许童童
    2019-12-04
    如果遇到 yield* 就将当前的yield执行权交到 yield* 里面,yield* 里面return的值,将返回给外层的x = yield* xxx 中的x

    作者回复: Yes. 赞的!+2

    
     2
  • .Alter
    2019-12-09
    老师好,我想问一下生成器这个挂起和调用栈移动的机制是协程吗?

    作者回复: 不是。

    不过实现上,可以是。OS真实线程的切换成本高,在实现上用协程来做是可以的。但这与具体引擎的选择有关。另外按照ECMAScript的约定,这里自己实现一个上下文的管理器也是可以的,与线程什么的,并没有关系。

     1
    
  • 阿鑫
    2019-12-04
    我的理解就是 tor 这个句柄其实就是包含了这个迭代器的一切,包括上下文 context 和执行函数。每次执行 tor.next() 就是把 context 压入栈顶,然后执行执行函数?

    作者回复: 确实,ECMAScript就是这样做的。

    如果tor是一个生成器对象,那么它就会有[[GeneratorContext]]这个私有槽,而tor.next()方法就是从这个私有槽中取出上下文给塞回到栈上。

    
    
  • 行问
    2019-12-04
    x = yield x

    首先,yield 是向函数外发送 x 的值

    其次,yield 接收外部传入的参数并赋值给 x

    解惑了之前理解 yield 是一个“等待”的过程,没有往“挂起”去构思

    时不时会用到 async await 来写并行的 Promise, 但 yield 只知其知识点和应用,还没有开发中实际使用过

    展开

    作者回复: Promise比await要难用一点,但其实深刻理解promise对整个的语言学习提升很大很大,因为它提供了一种新的理解程序执行逻辑的模式。不过这些内容,会放到20讲之后才讨论,这一次的课程中是不包括的。:)

     1
    
  • 潇潇雨歇
    2019-12-04
    先看看yield再来
    
    
我们在线,来聊聊吧