明星在函数定义中意味着什么,比如" function *()"?

时间:2014-04-25 05:53:12

标签: javascript function syntax ecmascript-6

 function*() { .... }

我刚刚在其他一些js代码中找到了这种形式的定义,这位明星的意思究竟是什么意思?感谢

2 个答案:

答案 0 :(得分:13)

从ES6开始,它将定义generator function。 (该链接指向旧的"和/或维基页面,它可能不再是最新的,因为它已被折叠到latest specification drafts;目前它是第14.4节。 )

这是一个生成器的例子:

function* fibonacci() {
    let [prev, curr] = [0, 1];
    for (;;) {
        [prev, curr] = [curr, prev + curr];
        yield curr;
    }
}

各种使用方式:

使用for-of循环(另一个ES6,在第13.6.4节中):

for (n of fibonacci()) {
    // truncate the sequence at 1000
    if (n > 1000)
        break;
    print(n);
}

作为迭代器:

let seq = fibonacci();
print(seq.next()); // 1
print(seq.next()); // 2
print(seq.next()); // 3
print(seq.next()); // 5
print(seq.next()); // 8

答案 1 :(得分:0)

来自here

  

带*标记的函数称为生成函数。该   以下两个一元运算符只允许在直接正文中   生成器功能(即,在体内但不嵌套在内部)   另一个功能):

AssignmentExpression:
    ...
    YieldExpression

YieldExpression:
    "yield" ("*"? AssignmentExpression)?
  

如果a中出现yield或yield *表达式,则会引发早期错误   非发电机功能。

同时检查MDN What Is This Thing Called Generators?