我遇到了这个问题:function*(){ ... }
从这个网页https://github.com/jmar777/suspend并不确定它是做什么的。“function *()”在nodejs中的含义是什么?
任何人都可以解释吗? 谢谢!
我遇到了这个问题:function*(){ ... }
从这个网页https://github.com/jmar777/suspend并不确定它是做什么的。“function *()”在nodejs中的含义是什么?
任何人都可以解释吗? 谢谢!
这意味着该函数是一个生成器函数。引用自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()
。这用于迭代中,并且当再次调用生成器时,它将恢复执行(它也将变量中的数据保留在变量中)并生成下一个元素。
http://wiki.ecmascript.org/doku.php?id=harmony:generators –
它是发电机功能(EcmaScript)和问题已经被回答[这里](http://stackoverflow.com/questions)/9620586 /功能中的JavaScript)。 – 2014-02-25 03:43:41