“function *()”在nodejs中意味着什么?

时间:2014-02-25 03:38:58

标签: javascript node.js

我从这个页面https://github.com/jmar777/suspend发现了这个偶像:function* (){ ... },但不确定它是做什么的。

有人可以解释一下吗? 谢谢!

1 个答案:

答案 0 :(得分:5)

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

  

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

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

通常迭代生成器函数。因为,它们产生值并等待下一个函数调用以继续执行,它们对于无限值生成器很有用。

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

我们可以查看示例here

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()。这在迭代中使用,当再次调用生成器时,它恢复执行(它也将数据保留在变量中)并生成下一个元素。