这意味着该函数是生成器函数。引用自http://wiki.ecmascript.org/doku.php?id=harmony:generators#syntax http://wiki.ecmascript.org/doku.php?id=harmony:generators#syntax
带有 * 标记的函数称为生成器函数。
普通函数执行并返回结果。但是生成器会产生值并等待它们再次被调用。然后该函数将resume它的执行。
生成器函数通常是迭代的。自从他们yield值并等待下一个函数调用以恢复执行,它们对于无限值生成器很有用。
它们的内存效率也很高。例如,假设您要生成 10000000 个数字,如果我们将它们存储在数组中,则可能会耗尽机器的内存。但是如果我们使用生成器,我们可以生成一个数字,产生值,当再次调用时,执行将恢复并可以生成下一个数字。
我们可以看一下例子,here http://wiki.ecmascript.org/doku.php?id=harmony%3agenerators#examples,
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
in n of fibonacci()
。它在迭代中使用,当再次调用生成器时,它会恢复执行(它也保留变量中的数据)并生成下一个元素。