【问题标题】:Javascript generator function yield is not assigning value in variableJavascript生成器函数yield未在变量中赋值
【发布时间】:2021-04-16 04:38:04
【问题描述】:

在javascript生成器中使用yield时遇到问题。让我们先看看我的代码-

function* gen(a, b) {
  let k = yield a + b;
  let m = yield a + b + k;
  yield a + b + k + m;
}

let x = gen(10, 20);

console.log(x.next());
console.log(x.next());
console.log(x.next());

在上面的代码中,在我第一次运行 next() 时,它给了我 30 的值。但是当我第二次尝试时,在第二次 next() 中,它给了我一个 NAN 值。这意味着,yield没有在k中赋值a+b的值。而是直接移到下一行。但我认为,它应该先给k赋值。

这里发生了什么?如果你知道,请告诉我。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    在生成器中,表达式:

    yield <someExpression>
    

    计算值传入生成器.next,像这样:

    function* gen(a, b) {
      const valPassedIn = yield 'foo';
      console.log('valPassedIn', valPassedIn);
    }
    
    let x = gen(10, 20);
    
    const containsFoo = x.next();
    x.next(123);

    在你的代码中,因为你没有用任何东西调用.next,所以km 都是undefined,所以它们不能是+d 任何东西(它们会产生NaN )。

    对于听起来像你想要的,计算总和,得到它,然后将它分别分配给k

    function* gen(a, b) {
      let k = a + b;
      yield k;
      let m = a + b + k;
      yield m;
      yield a + b + k + m;
    }
    
    let x = gen(10, 20);
    
    console.log(x.next());
    console.log(x.next());
    console.log(x.next());

    【讨论】:

      【解决方案2】:

      km 仍未定义,因为对它们的分配是在yield 完成之后。在yield

      之前为各个变量赋值

      function* gen(a, b) {
        k = a + b;
        yield k;
        m = a + b + k
        yield m;
        yield a + b + k + m;
      }
      
      let x = gen(10, 20);
      console.log(x.next());
      console.log(x.next());
      console.log(x.next());

      【讨论】:

        【解决方案3】:

        因为kundefined 我们第一次运行next()

        【讨论】:

          猜你喜欢
          • 2021-09-05
          • 2016-03-19
          • 2015-06-07
          • 1970-01-01
          • 2016-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多