我正在尝试理解yield
如何与递归一起使用。例如,我们有以下用CoffeeScript编写的函数,计算正整数的阶乘并返回当前累积产品:
prod = 1
f = (n) ->
if n > 0
prod = n * prod
yield prod
f(n-1)
因此,如果我们使用 a = f(3)
调用该函数,并通过 a.next()
进行步进,我期望看到类似以下的内容
{value: 3, done: false} // prod = 3 * 1
{value: 6, done: false} // prod = 3 * 2
{value: 6, done: true} // prod = 3 * 2 * 1
然而,实际输出是:
{value: 3, done: false}
{value: {}, done: false}
{value: undefined, done: true}
{value: undefined, done: true}
...
能否有人解释一下这里是在发生什么?以及我应该如何更改我的代码以获得所需的结果?感谢!