Javascript生成器函数yield未在变量中赋值
Posted
技术标签:
【中文标题】Javascript生成器函数yield未在变量中赋值【英文标题】:Javascript generator function yield is not assigning value in variable 【发布时间】: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赋值。
这里发生了什么?如果你知道,请告诉我。
【问题讨论】:
【参考方案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
,所以k
和m
都是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】:k
和 m
仍未定义,因为对它们的分配是在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】:因为k
是undefined
我们第一次运行next()
【讨论】:
以上是关于Javascript生成器函数yield未在变量中赋值的主要内容,如果未能解决你的问题,请参考以下文章
javascript - 使用另一个函数中的变量 javascript - '今天未在对象中定义'
ReferenceError StringBuilder 未在 javascript 中定义