迭代器运行顺序的问题

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才对啊

阅读 1.4k
1 个回答

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

// 交出句柄前就已经取了 a 的值
b = a * (yield 2);
// 重新获得句柄后再获取 a 的值。
b = (yield 2) * a;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题