在nodejs中,“function *()”是什么意思?

我碰到这个idom: function* (){ ... }从这个页面https://github.com/jmar777/suspend不知道它是做什么的。

谁能解释一下? 谢谢!

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

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

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

发生器函数通常是迭代的。 因为它们产生这些值并等待下一个函数调用来恢复执行,它们对于无限值生成器很有用。

它们的记忆效率也是如此。 例如,假设您要生成10000000个数字,如果我们将它们存储在一个数组中,则可能会耗尽机器的内存。 但是如果我们使用一个生成器,我们可以生成一个数字,yield值,当再次调用时,执行将被恢复,并且可以生成下一个数字。

我们可以看看这里的例子,

 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 ,值将返回到nn of fibonacci() 。 在迭代中使用它,当再次调用生成器时,它将继续执行(它也将variables中的数据保留),并生成下一个元素。