fif*_*fth 2 javascript syntax function ecmascript-6
function*() { .... }
Run Code Online (Sandbox Code Playgroud)
我刚刚在其他一些js代码中找到了这种形式的定义,这位明星的意思究竟是什么意思?谢谢
T.J*_*der 13
从ES6开始,它将定义一个生成器函数.(这个链接是旧的"和谐"维基页面,它可能不再是最新的,因为它已被折叠到最新的规范草案中 ;目前它是第14.4节.)
这是一个生成器的例子:
function* fibonacci() {
let [prev, curr] = [0, 1];
for (;;) {
[prev, curr] = [curr, prev + curr];
yield curr;
}
}
Run Code Online (Sandbox Code Playgroud)
各种使用方法:
使用for-of循环(另一个ES6,在第13.6.4节):
for (n of fibonacci()) {
// truncate the sequence at 1000
if (n > 1000)
break;
print(n);
}
Run Code Online (Sandbox Code Playgroud)
作为迭代器:
let seq = fibonacci();
print(seq.next()); // 1
print(seq.next()); // 2
print(seq.next()); // 3
print(seq.next()); // 5
print(seq.next()); // 8
Run Code Online (Sandbox Code Playgroud)
从这里
带有 * 标记的函数称为生成器函数。以下两个一元运算符仅允许在生成器函数的直接主体中使用(即在主体中但不能嵌套在另一个函数中):
AssignmentExpression:
...
YieldExpression
YieldExpression:
"yield" ("*"? AssignmentExpression)?
Run Code Online (Sandbox Code Playgroud)
如果yield 或yield* 表达式出现在非生成器函数中,则会引发早期错误。
另请查看MDN和What Is This Thing Called Generators?
| 归档时间: |
|
| 查看次数: |
1222 次 |
| 最近记录: |