明星在函数定义中的含义是什么,比如"function*()"?

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)


Rah*_*thi 1

这里

带有 * 标记的函数称为生成器函数。以下两个一元运算符仅允许在生成器函数的直接主体中使用(即在主体中但不能嵌套在另一个函数中):

AssignmentExpression:
    ...
    YieldExpression

YieldExpression:
    "yield" ("*"? AssignmentExpression)?
Run Code Online (Sandbox Code Playgroud)

如果yield 或yield* 表达式出现在非生成器函数中,则会引发早期错误。

另请查看MDNWhat Is This Thing Called Generators?