検索

ホームページ  >  に質問  >  本文

ES 2017: async 関数 vs AsyncFunction オブジェクト vs async 関数式

先ほど async 関数 について読んだところ、ES2017 にも同様の機能がいくつか見つかりました。多くの混乱を引き起こしているので、一つお聞きしたいのですが:

  1. async functionAsyncFunction (非同期関数の作成に使用)、および非同期関数式 (これも別の非同期関数だと思います) の違いは何ですか?
  2. ある形式を別の形式ではなく使用する必要があるのはどのような場合ですか?

皆さんの癖やパフォーマンスのハイライトを大歓迎です。

P粉459440991P粉459440991325日前467

全員に返信(1)返信します

  • P粉287726308

    P粉2877263082024-03-26 00:44:29

    JavaScript で関数を作成するには 4 つの方法があります。 JavaScript で非同期関数を作成する方法も 4 つあり、これらは互いに完全にミラーリングされています。

    これがどのように機能するかを示すために、グローバルに宣言された単純な sleep 関数を使用しました。 リーリー

    関数宣言

    リーリー

    これは関数を宣言する最も簡単な方法です。一度宣言すると、現在の関数スコープの先頭にホイストできます。

    関数宣言は、

    async 関数が常に Promise を返し、await を使用できる点を除いて、非同期関数宣言とまったく同じです。

    関数式

    リーリー

    関数式は関数宣言と非常によく似ています。ただし、これらは関数スコープの最上位には昇格されません。必要に応じて何度でも再定義できます。これらはインラインで定義できます。これらは匿名または名前付きにすることができます。名前付きの場合、その名前はその関数のスコープ内の関数を参照します。

    関数式は、

    async 関数が常に Promise を返し、await を使用できる点を除いて、非同期関数式とまったく同じです。

    アロー関数

    リーリー

    アロー関数は、ES2015 (ES6) で導入された関数を定義するための迅速かつ短い方法です。これらは、常に匿名であること、this の値が常に字句的に束縛されること、つまり外部スコープから継承されることを除いて、ほとんどの点で関数式と同等です。

    アロー関数は、

    async 関数が常に Promise を返し、await を使用できる点を除いて、非同期アロー関数とまったく同じです。 (各非同期関数内に複数のステートメントがあるため、上記のステートメントとは若干異なります。つまり、これらのステートメントはブロック {}return に含める必要があります。これは、1 つのステートメントよりも長い通常のアロー関数にも当てはまります。)

    関数コンストラクター

    リーリー

    関数コンストラクターを使用すると、文字列を使用して関数を動的に定義できます。これらは常にグローバル スコープで実行され、定義されているスコープにはアクセスできないことに注意してください。これらは

    まれな状況でのみ役に立ちます。個人的には、非同期関数コンストラクターは役に立たないと思います。 AsyncFunction はグローバル オブジェクトではなく、最初に const AsyncFunction = Object.getPrototypeOf(async function(){}).constructor を使用して取得する必要があるため、ES2017 の作者も私に同意しています。 関数コンストラクターを使用して作成された関数は、

    async

    関数が常に Promise を返し、await を使用できることを除いて、匿名関数コンストラクターを使用して作成された関数とまったく同じです。 (でも、もうお分かりでしょう?)

    返事
    0
  • キャンセル返事