迭代器运行顺序的问题

function step(gen) {
      const it = gen();
      let last;
      return function() {
        last = it.next(last).value;
      };
    }

    function* foo() {
      a++;
      yield;
      b *= a;
      a = (yield b) + 3;
    }

    function* bar() {
      b--;
      yield;
      a = (yield 8) + b;
      b = a * (yield 2);
    }

    var a = 1;
    var b = 2;

    const s1 = step(foo);
    const s2 = step(bar);

    s2();
    s2();
    s1();
    s2();

    s1();

    s1();
    s2();

    console.log(a, b);    // 12 18

最后一步运行 s2() 的时候 a = 12 , b = 9 ,然后执行 b = a * 2 ,最后应该输出12 24才对啊

已解决 悬赏分:20 - 解决时间 2021-11-26 12:15
反对 0举报 0 收藏 0

回答1

最佳
  • @

    你可以观察一下下面两种写法的区别。

    // 交出句柄前就已经取了 a 的值
    b = a * (yield 2);
    // 重新获得句柄后再获取 a 的值。
    b = (yield 2) * a;
    支持 0 反对 0 举报
    2021-11-26 04:57