Saya baru sahaja membaca tentang async 函数
dan menemui beberapa ciri serupa untuk ES2017. Ia menyebabkan banyak kekeliruan dan saya hanya ingin bertanya:
async function
、AsyncFunction
(digunakan untuk mencipta fungsi async) dan ungkapan fungsi async (yang saya fikir hanyalah satu lagi fungsi async)? Sorotan keanehan dan persembahan semua orang akan sangat dihargai!
Terdapat empat cara untuk mencipta fungsi dalam Javascript. Terdapat juga empat cara untuk mencipta fungsi tak segerak dalam Javascript, yang merupakan cermin tepat antara satu sama lain.
Untuk menunjukkan cara ini berfungsi, saya menggunakan fungsi
sleep
mudah, diisytiharkan secara global:Pengisytiharan fungsi
Ini adalah cara paling mudah untuk mengisytiharkan fungsi. Ia boleh diisytiharkan sekali dan dinaikkan ke bahagian atas skop fungsi semasa.
Pengisytiharan fungsi adalah sama seperti pengisytiharan fungsi async, kecuali
async
函数始终返回一个 Promise 并允许您使用await
.Ekspresi fungsi
Ekspresi fungsi kelihatan sangat mirip dengan pengisytiharan fungsi. Walau bagaimanapun, mereka tidak dinaikkan pangkat ke bahagian atas skop fungsi. Anda boleh mentakrifkan semula mereka seberapa banyak yang diperlukan. Mereka boleh ditakrifkan sebaris. Mereka boleh tanpa nama atau dinamakan: jika mereka dinamakan, nama itu merujuk kepada fungsi dalam skop fungsi itu.
Ekspresi fungsi adalah betul-betul sama dengan ungkapan fungsi tak segerak, kecuali
async
函数始终返回一个 Promise 并允许您使用await
.Fungsi anak panah
Fungsi anak panah ialah cara cepat dan singkat untuk mentakrifkan fungsi, yang diperkenalkan dalam ES2015 (ES6). Ia bersamaan dengan ungkapan fungsi dalam kebanyakan aspek, kecuali ia sentiasa tanpa nama dan nilai
this
sentiasa terikat secara leksikal, iaitu diwarisi daripada skop luar.Fungsi anak panah adalah sama seperti fungsi anak panah async, cuma
async
函数始终返回一个 Promise 并允许您使用await
。 (它们在上面的语句中略有不同,因为每个异步函数内部都有多个语句。这意味着这些语句需要包含在一个块{}
中,并且return
. (Ia sedikit berbeza dalam penyataan di atas kerana terdapat berbilang penyataan di dalam setiap fungsi async. Ini bermakna penyataan ini perlu disertakan dalam blok{}
dan keperluanreturn code> untuk menjadi eksplisit. Ini juga benar untuk fungsi anak panah biasa yang lebih panjang daripada satu pernyataan.)
Pembina fungsi
Pembina fungsi membolehkan anda menentukan fungsi secara dinamik menggunakan rentetan. Ambil perhatian bahawa mereka sentiasa berjalan dalam skop global dan tidak mempunyai akses kepada skop yang ditakrifkan. Mereka hanya berguna dalam situasi yang jarang berlaku. Secara peribadi saya tidak fikir pembina fungsi async akan berguna. Pengarang ES2017 bersetuju dengan saya kerana
AsyncFunction
不是全局对象,必须首先使用const AsyncFunction = Object.getPrototypeOf(async function(){}).constructor
mendapat.Fungsi yang dibuat menggunakan pembina fungsi adalah sama seperti fungsi yang dibuat menggunakan pembina fungsi tanpa nama, kecuali
async
函数始终返回一个 Promise 并允许您使用await
. (Tetapi anda sudah meneka kan?)