314

つまり、どう表現するか

function *(next) {}

矢印構文で?考えられるすべての組み合わせを試しましたが、ドキュメントが見つかりません。

(現在 Node.js v0.11.14 を使用しています。)

4

7 に答える 7

296

ジェネレーターで ES6 のアロー関数構文を使用できますか?

できません。ごめん。

MDNによると

function*ステートメント (キーワードのfunction後に​​アスタリスクが続く) は、ジェネレーター関数を定義します。

仕様書から(私の強調):

関数の構文は、オプションの*トークンを追加するために拡張されています。

FunctionDeclaration: "function" "*"? Identifier "(" FormalParameterList? ")" 
  "{" FunctionBody "}"
于 2014-12-26T20:03:31.043 に答える
154

インライン関数とアロー関数の違い

まず第一に、アロー関数 () => {}はインライン関数を置き換えるために作成されたものではなくfunction(){}、それらは異なります。インライン関数は単に関数であるため、問題はアロー関数とインライン関数の違いです。

アロー関数式 (アロー関数とも呼ばれる) は、関数式に比べて構文が短く、独自のthisargumentssuper、またはnew.target) をバインドしません。アロー関数は常に無名です。

ここでいくつかの簡単な詳細


アロー関数をジェネレーターとして使用できない理由

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions

yield キーワードの使用

yieldキーワードは、アロー関数の本体では使用できません (その中でさらにネストされた関数内で許可されている場合を除く)。結果として、アロー関数はジェネレーターとして使用できません。

なしのジェネレーターyieldは意味をなさないことに注意してください。


アロー関数がyieldを使用できない理由

http://tc39wiki.calculist.org/es6/arrow-functions/

アロー関数はthisレキシカルにバインドreturnし、Block body ケースでバインドして、すぐに囲んでいるアロー関数から戻るようにし、すぐに囲んでいるアロー関数の外側のステートメントを参照しないようにしますbreakcontinue

Identifierプライマリ式はarguments、アロー関数の本体 (式またはブロック形式) では使用できません。

同様にyield、アロー関数の本体では使用できません。アローはジェネレーターになることはできず、深い継続は必要ありません。

Arrow-Function の Yield はセマンティック エラーをスローします: http://www.ecma-international.org/

結局のところ、その理由は ECMA6 の実装における深い複雑さにあります。C# では、同様の理由でこれも許可されていません。

于 2015-12-05T16:42:29.097 に答える
51

上記のesdiscuss.org2013 年 11 月の Ecma TC39 委員会 ES6 ミーティング ノートに関する議論に加えて、2016 年 9 月の 2 つの ES7 ミーティング[1] [2]でジェネレーターの矢印が再検討されました。=*>さまざまな構文 (主にと)の長所と短所、およびこの機能の正当な理由と使用例の欠如について議論した後=>*、彼らは次の結論に達しました。

  • 委員会からはいくらかの関心が寄せられていますが、この機能が新しい構文を追加するほど重要ではないという懸念があります。
  • =>*[Domenic Denicola] の非同期反復提案の一環として、少なくともステージ 0 に到達できるかどうかを確認するために、3 日目に再訪する予定です。

ジェネレーターの矢の提案はステージ 1に移され、ブレンダン アイヒとドメニック デニコラがチャンピオンになりました。上記の非同期反復は 2018 年に終了し、実装されました。

2019 年 10 月、Sergey Rubanov による公式レポが登場し、構文やその他の詳細についてさらに議論が行われました。

于 2016-12-07T11:03:29.740 に答える
6

今はできませんが、ステージ 1 にある 2019 年 10 月にTC39 が同様の提案をリリースするため、将来的にはそうなる可能性があります。

于 2020-02-24T17:08:03.657 に答える