在Node.js中,"function*()"是什么意思?

10
我发现这个习语:function* (){ ... } 来自这个页面 https://github.com/jmar777/suspend,但不确定它是做什么的。
有人能解释一下吗? 谢谢!

1
http://wiki.ecmascript.org/doku.php?id=harmony:generators - Felix Kling
它是生成器函数(EcmaScript),问题已经在这里得到了回答。 - user2869768
1个回答

6
这意味着这个函数是一个生成器函数。引用自http://wiki.ecmascript.org/doku.php?id=harmony:generators#syntax

带有 * 标记的函数被称为生成器函数。

普通函数执行并返回结果。但是生成器会产生值,并等待它们再次被调用。然后函数将恢复其执行。

生成器函数通常是可迭代的。由于它们生成值并等待下一个函数调用来恢复执行,因此它们非常适用于无限值生成器。

它们也很节省内存。例如,假设您想生成10000000个数字,如果我们将它们存储在一个数组中,可能会耗尽机器的内存。但是如果我们使用生成器,我们可以生成一个数字,产生值,当再次调用时,执行将恢复并且可以生成下一个数字。

我们可以查看这里的例子

function* fibonacci() {
    let [prev, curr] = [0, 1];
    for (;;) {    // Infinite looping
        [prev, curr] = [curr, prev + curr];
        yield curr;
    }
}

并且正如我所说,生成器是像这样迭代的。
for (n of fibonacci()) {
    // truncate the sequence at 1000
    if (n > 1000)
        break;
    print(n);
}

可以看出,生成器函数实际上具有无限循环。当执行 yield curr 时,值将返回到 n of fibonacci() 中的 n。这在迭代中使用,当再次调用生成器时,它会恢复执行(还保留变量中的数据)并生成下一个元素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接