【发布时间】:2020-01-31 00:42:17
【问题描述】:
在尝试理解生成器时,而不是跟随:
function* powerSeries(number,power) {
let base = number;
while (true) {
yield Math.pow(base, power);
base++
}
}
let n = powerSeries(3,2)
n.next() // value: 9
n.next() // value: 16
...
我试过了:
function* powerSeries(number,power) {
let base = number;
yield Math.pow(base, power);
return base++ // was trying to understand what happens if using return
}
let n = powerSeries(3,2)
n.next() // value: 9
n.next() // value: 3 But how ????
我可以理解后期增量没有完成,因为它不在循环内。因此,基数保持为 3。但是,它是如何变成 1 的,所以结果是 3?
确认: 谢谢大家。我很困惑,如果我使用 return 语句,那么它仍然会调用 yield。
【问题讨论】:
-
你返回
base,而不是Math.pow(base, power)和base === 3。没有1的幂;在第二个.next没有任何东西被取幂。 -
是的,我是故意这样做的。而且我已经同意我的问题,即基数为 3,因为它不在循环内。但是权力是如何变成 1 的呢?
-
阅读我编辑的评论。
-
你认为
power为什么会变成1?它仍然是 2,但在单个yield语句(产生你看到的 9)之后,它再也没有使用过。 -
@gulcy “啊,你的意思是没有使用 yield 而只是返回语句?” — 是的,当然。为什么
yield会再次被执行?请改用yield ["yield", Math.pow(base, power)]; return ["return", base++]。你看到两个yields 了吗?不;你会得到["yield", 9]和["return", 3]。
标签: javascript ecmascript-6 generator yield