つまり、どう表現するか
function *(next) {}
矢印構文で?考えられるすべての組み合わせを試しましたが、ドキュメントが見つかりません。
(現在 Node.js v0.11.14 を使用しています。)
つまり、どう表現するか
function *(next) {}
矢印構文で?考えられるすべての組み合わせを試しましたが、ドキュメントが見つかりません。
(現在 Node.js v0.11.14 を使用しています。)
まず第一に、アロー関数 () => {}
はインライン関数を置き換えるために作成されたものではなくfunction(){}
、それらは異なります。インライン関数は単に関数であるため、問題はアロー関数とインライン関数の違いです。
アロー関数式 (アロー関数とも呼ばれる) は、関数式に比べて構文が短く、独自の
this
、arguments
、super
、またはnew.target
) をバインドしません。アロー関数は常に無名です。
ここでいくつかの簡単な詳細
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions
yield キーワードの使用
yieldキーワードは、アロー関数の本体では使用できません (その中でさらにネストされた関数内で許可されている場合を除く)。結果として、アロー関数はジェネレーターとして使用できません。
なしのジェネレーターyield
は意味をなさないことに注意してください。
http://tc39wiki.calculist.org/es6/arrow-functions/
アロー関数は
this
レキシカルにバインドreturn
し、Block body ケースでバインドして、すぐに囲んでいるアロー関数から戻るようにし、すぐに囲んでいるアロー関数の外側のステートメントを参照しないようにしますbreak
。continue
Identifierプライマリ式は
arguments
、アロー関数の本体 (式またはブロック形式) では使用できません。同様に
yield
、アロー関数の本体では使用できません。アローはジェネレーターになることはできず、深い継続は必要ありません。
Arrow-Function の Yield はセマンティック エラーをスローします: http://www.ecma-international.org/
結局のところ、その理由は ECMA6 の実装における深い複雑さにあります。C# では、同様の理由でこれも許可されていません。
上記のesdiscuss.orgと2013 年 11 月の Ecma TC39 委員会 ES6 ミーティング ノートに関する議論に加えて、2016 年 9 月の 2 つの ES7 ミーティング[1] [2]でジェネレーターの矢印が再検討されました。=*>
さまざまな構文 (主にと)の長所と短所、およびこの機能の正当な理由と使用例の欠如について議論した後=>*
、彼らは次の結論に達しました。
- 委員会からはいくらかの関心が寄せられていますが、この機能が新しい構文を追加するほど重要ではないという懸念があります。
=>*
[Domenic Denicola] の非同期反復提案の一環として、少なくともステージ 0 に到達できるかどうかを確認するために、3 日目に再訪する予定です。
ジェネレーターの矢の提案はステージ 1に移され、ブレンダン アイヒとドメニック デニコラがチャンピオンになりました。上記の非同期反復は 2018 年に終了し、実装されました。
2019 年 10 月、Sergey Rubanov による公式レポが登場し、構文やその他の詳細についてさらに議論が行われました。
今はできませんが、ステージ 1 にある 2019 年 10 月にTC39 が同様の提案をリリースするため、将来的にはそうなる可能性があります。