【问题标题】:What does the star mean in function definition like "function* ()"? [duplicate]函数定义中的星号是什么意思,比如“function*()”? [复制]
【发布时间】:2014-04-25 05:53:11
【问题描述】:
 function*() { .... }

我刚刚在其他一些 js 代码中发现了这种定义形式,星号到底是什么意思?谢谢

【问题讨论】:

标签: javascript function syntax ecmascript-6


【解决方案1】:

在 ES2015+ 中,它定义了一个generator function

这是一个生成器的例子:

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

多种使用方式:

使用for-of 循环(另一个 ES2015+ 事物):

for (const n of fibonacci()) {
    // truncate the sequence at 1000
    if (n > 1000) {
        break;
    }
    console.log(n);
}

例子:

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

for (const n of fibonacci()) {
    // truncate the sequence at 1000
    if (n > 1000) {
        break;
    }
    console.log(n);
}
.as-console-wrapper {
    max-height: 100% !important;
}

直接使用迭代器(for-of 在幕后为您使用):

const seq = fibonacci();
console.log(seq.next().value); // 1
console.log(seq.next().value); // 2
console.log(seq.next().value); // 3
console.log(seq.next().value); // 5
console.log(seq.next().value); // 8

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

const seq = fibonacci();
console.log(seq.next().value); // 1
console.log(seq.next().value); // 2
console.log(seq.next().value); // 3
console.log(seq.next().value); // 5
console.log(seq.next().value); // 8
.as-console-wrapper {
    max-height: 100% !important;
}

【讨论】:

  • 哦,一个 ES6 特性。甜蜜。
【解决方案2】:

来自here

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

AssignmentExpression:
    ...
    YieldExpression

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

如果 yield 或 yield* 表达式出现在 非生成器函数。

同时检查MDNWhat Is This Thing Called Generators?

【讨论】:

    猜你喜欢
    • 2014-06-18
    • 2011-05-09
    • 2016-12-15
    • 2010-09-28
    • 2012-07-04
    • 2016-02-14
    • 2013-08-25
    • 2018-11-21
    • 2018-02-21
    相关资源
    最近更新 更多