TLJ*_*TLJ 8 javascript node.js
我遇到了这个偶像:function* (){ ... }从这个页面https://github.com/jmar777/suspend,不知道它做了什么.
谁能解释一下?谢谢!
这意味着该函数是一个生成器函数.引自http://wiki.ecmascript.org/doku.php?id=harmony:generators#syntax
具有*标记的函数称为生成器函数.
普通函数执行并返回结果.但是生成器会产生值并等待它们再次被调用.然后该函数将恢复执行.
通常迭代生成器函数.因为,它们产生值并从下一个函数调用等待继续执行,它们对于无限值生成器很有用.
它们也具有内存效率.例如,假设您要生成10000000个数字,如果我们将它们存储在数组中,我们可能会耗尽机器的内存.但是如果我们使用生成器,我们可以生成一个数字,屈服值,并且当再次调用时,将恢复执行并且可以生成下一个数字.
我们可以看一下这里的例子,
function* fibonacci() {
let [prev, curr] = [0, 1];
for (;;) { // Infinite looping
[prev, curr] = [curr, prev + curr];
yield curr;
}
}
Run Code Online (Sandbox Code Playgroud)
正如我所说,生成器是这样迭代的
for (n of fibonacci()) {
// truncate the sequence at 1000
if (n > 1000)
break;
print(n);
}
Run Code Online (Sandbox Code Playgroud)
看到生成器函数实际上有一个无限循环.当yield curr被执行时,值将返回n在n of fibonacci().这在迭代中使用,当再次调用生成器时,它恢复执行(它也将数据保留在变量中)并生成下一个元素.
| 归档时间: |
|
| 查看次数: |
1611 次 |
| 最近记录: |