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