84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
先ほど async 関数 について読んだところ、ES2017 にも同様の機能がいくつか見つかりました。多くの混乱を引き起こしているので、一つお聞きしたいのですが:
async 関数
async function
AsyncFunction
皆さんの癖やパフォーマンスのハイライトを大歓迎です。
JavaScript で関数を作成するには 4 つの方法があります。 JavaScript で非同期関数を作成する方法も 4 つあり、これらは互いに完全にミラーリングされています。
これがどのように機能するかを示すために、グローバルに宣言された単純な sleep 関数を使用しました。 リーリー
sleep
async 関数が常に Promise を返し、await を使用できる点を除いて、非同期関数宣言とまったく同じです。
関数が常に Promise を返し、
を使用できる点を除いて、非同期関数宣言とまったく同じです。
async 関数が常に Promise を返し、await を使用できる点を除いて、非同期関数式とまったく同じです。
を使用できる点を除いて、非同期関数式とまったく同じです。
アロー関数は、ES2015 (ES6) で導入された関数を定義するための迅速かつ短い方法です。これらは、常に匿名であること、this の値が常に字句的に束縛されること、つまり外部スコープから継承されることを除いて、ほとんどの点で関数式と同等です。
の値が常に字句的に束縛されること、つまり外部スコープから継承されることを除いて、ほとんどの点で関数式と同等です。
async 関数が常に Promise を返し、await を使用できる点を除いて、非同期アロー関数とまったく同じです。 (各非同期関数内に複数のステートメントがあるため、上記のステートメントとは若干異なります。つまり、これらのステートメントはブロック {} と return に含める必要があります。これは、1 つのステートメントよりも長い通常のアロー関数にも当てはまります。)
を使用できる点を除いて、非同期アロー関数とまったく同じです。 (各非同期関数内に複数のステートメントがあるため、上記のステートメントとは若干異なります。つまり、これらのステートメントはブロック
と
に含める必要があります。これは、1 つのステートメントよりも長い通常のアロー関数にも当てはまります。)
まれな状況でのみ役に立ちます。個人的には、非同期関数コンストラクターは役に立たないと思います。 AsyncFunction はグローバル オブジェクトではなく、最初に const AsyncFunction = Object.getPrototypeOf(async function(){}).constructor を使用して取得する必要があるため、ES2017 の作者も私に同意しています。 関数コンストラクターを使用して作成された関数は、
const AsyncFunction = Object.getPrototypeOf(async function(){}).constructor
関数が常に Promise を返し、await を使用できることを除いて、匿名関数コンストラクターを使用して作成された関数とまったく同じです。 (でも、もうお分かりでしょう?)
await
JavaScript で関数を作成するには 4 つの方法があります。 JavaScript で非同期関数を作成する方法も 4 つあり、これらは互いに完全にミラーリングされています。
これがどのように機能するかを示すために、グローバルに宣言された単純な
関数宣言sleep
関数を使用しました。 リーリーリーリー
これは関数を宣言する最も簡単な方法です。一度宣言すると、現在の関数スコープの先頭にホイストできます。async
関数式関数が常に Promise を返し、
awaitを使用できる点を除いて、非同期関数宣言とまったく同じです。
リーリー
関数式は関数宣言と非常によく似ています。ただし、これらは関数スコープの最上位には昇格されません。必要に応じて何度でも再定義できます。これらはインラインで定義できます。これらは匿名または名前付きにすることができます。名前付きの場合、その名前はその関数のスコープ内の関数を参照します。async
アロー関数関数が常に Promise を返し、
awaitを使用できる点を除いて、非同期関数式とまったく同じです。
リーリー
アロー関数は、ES2015 (ES6) で導入された関数を定義するための迅速かつ短い方法です。これらは、常に匿名であること、this
アロー関数は、の値が常に字句的に束縛されること、つまり外部スコープから継承されることを除いて、ほとんどの点で関数式と同等です。
async
関数コンストラクター関数が常に Promise を返し、
awaitを使用できる点を除いて、非同期アロー関数とまったく同じです。 (各非同期関数内に複数のステートメントがあるため、上記のステートメントとは若干異なります。つまり、これらのステートメントはブロック
{}と
returnに含める必要があります。これは、1 つのステートメントよりも長い通常のアロー関数にも当てはまります。)
リーリー
関数コンストラクターを使用すると、文字列を使用して関数を動的に定義できます。これらは常にグローバル スコープで実行され、定義されているスコープにはアクセスできないことに注意してください。これらはまれな状況でのみ役に立ちます。個人的には、非同期関数コンストラクターは役に立たないと思います。 AsyncFunction はグローバル オブジェクトではなく、最初に
関数コンストラクターを使用して作成された関数は、
asyncconst AsyncFunction = Object.getPrototypeOf(async function(){}).constructor
を使用して取得する必要があるため、ES2017 の作者も私に同意しています。関数が常に Promise を返し、
await
を使用できることを除いて、匿名関数コンストラクターを使用して作成された関数とまったく同じです。 (でも、もうお分かりでしょう?)