6
 function*() { .... }

他のjsコードでその形式の定義を見つけたばかりですが、星は実際にはどういう意味ですか? ありがとう

4

2 に答える 2

18

ES2015+ では、ジェネレーター関数を定義します。

ジェネレーターの例を次に示します。

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;
}

于 2014-04-25T05:55:44.573 に答える
1

ここから

* トークンを持つ関数は、ジェネレーター関数と呼ばれます。次の 2 つの単項演算子は、ジェネレーター関数の直接の本体 (つまり、本体ではあるが別の関数内にネストされていない) でのみ許可されます。

AssignmentExpression:
    ...
    YieldExpression

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

生成関数以外で yield または yield* 式が発生すると、初期エラーが発生します。

また、MDNWhat Is This Thing Called Generators?も確認してください。

于 2014-04-25T05:56:57.443 に答える