찾다

 >  Q&A  >  본문

node.js - generator中yield *next 与 yield next的区别是什么?

yield *next 与 yield next的区别是什么?

怪我咯怪我咯2781일 전562

모든 응답(2)나는 대답할 것이다

  • 高洛峰

    高洛峰2017-04-17 11:16:24

    yield* 是委托提取器,详情看这里:http://wiki.ecmascript.org/doku.php?id=harmony:generators#delegating_yield。简单地说,yield 是你给什么它提取什么,但是 yield* 会继续向下请求,直到没的提取为止。

    举个例子好了:

    function* a() { yield 1; yield 2; yield 3; }
    function* b() { yield 4; yield* a(); yield 5; }
    function* c() { yield 6; yield* b(); yield 7; }
    
    for (let x of c()) console.log(x)    // 你觉得会输出什么?先自己试试看
    

    答案是:6, 4, 1, 2, 3, 5, 7,这个逻辑还算挺好理解吧?

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-04-17 11:16:24

    其实可以简单的理解为:yield next是让generator返回next,而yield *next里的next本身是一个generator,外层generator返回这个next generator的返回值

    회신하다
    0
  • 취소회신하다