Saya juga memiliki pertanyaan yang sama dan datang ke sini. Setelah membaca posting dan komentar, saya merasa menggunakan generator dalam fungsi panah tampaknya tidak jelas:
const generator = () => 2*3; // * implies multiplication
// so, this would be a confusing
const generator = () =>* something; // err, multiplying?
const generator = () =*> ... // err, ^^
const generator = ()*=> ... // err, *=3, still multiplying?
const generator=*()=> ... // err, ^^
const generator = *param => ... //err, "param" is not fixed word
Inilah yang mungkin menjadi alasan utama mereka tidak mengimplementasikan generator dalam kaitannya dengan fungsi panah.
Tetapi, jika saya salah satu dari mereka, saya dapat berpikir seperti ini:
const generator = gen param => ... // hmm, gen indicates a generator
const generator = gen () => ... // ^^
Ini terasa seperti kita memiliki fungsi asinkron:
const asyncFunction = async () => ... // pretty cool
Karena, dengan fungsi normal, kata kunci async ada, jadi fungsi panah menggunakannya - async () =>
sepertinya async function()
.
Tapi, tidak ada kata kunci seperti gen
atau generator
dan sayangnya fungsi panah tidak menggunakannya.
Untuk menyimpulkan:
Bahkan jika mereka ingin mengimplementasikan generator dalam fungsi panah, saya pikir mereka perlu memikirkan kembali tentang sintaks generator di core js:
generator function myfunc() {}
// rather than
function* myfunc() {} // or, function *myfunc() {}
Dan ini akan menjadi kesalahan besar. Jadi, menjaga fungsi panah dari generator, cukup keren.
Mengikuti @Bergi komentar :
Tidak. Fungsi panah seharusnya ringan (dan tidak memiliki .prototype misalnya) dan seringkali satu-liner, sedangkan generator sangat berlawanan.
Saya akan mengatakan bahwa tujuan penggunaan generator adalah run-stop-run dan jadi saya tidak berpikir kita perlu peduli dengan prototipe, leksikal ini, dll.
function*
Pernyataan (kata kunci fungsi diikuti oleh tanda bintang) mendefinisikan fungsi generator."