Miałem też to samo pytanie i przyszedłem tutaj. Po przeczytaniu postów i komentarzy poczułem, że używanie generatora w funkcji strzałki wydaje się niejasne:
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
To może być główny powód, dla którego nie zaimplementowali generatora w związku z funkcją strzałki.
Ale gdybym był jednym z nich, pomyślałbym tak:
const generator = gen param => ... // hmm, gen indicates a generator
const generator = gen () => ... // ^^
Wydaje się, że mamy funkcję asynchroniczną:
const asyncFunction = async () => ... // pretty cool
Ponieważ przy normalnej funkcji istnieje słowo kluczowe asynchroniczne , więc funkcja strzałki korzysta z niego - async () =>
prawdopodobnie się wydaje async function()
.
Ale nie ma słowa kluczowego takiego jak gen
lub generator
i, niestety, funkcja strzałki nie używa go.
Podsumowując:
Nawet jeśli chcą zaimplementować generator w funkcji strzałki, myślę, że muszą przemyśleć składnię generatora w rdzeniu js:
generator function myfunc() {}
// rather than
function* myfunc() {} // or, function *myfunc() {}
A to będzie wielka pomyłka. Tak więc utrzymywanie funkcji strzałki poza generatorem jest całkiem fajne.
Po komentarzu @Bergi :
Nie. Funkcje strzałek powinny być lekkie (i nie mają na przykład prototypu) i często jednowarstwowe, podczas gdy generatory są wręcz przeciwne.
Powiem, że celem generatora jest Run-Stop-Run, więc nie sądzę, że musimy dbać o prototyp, leksykalne itp.
function*
Instrukcja (słowo kluczowe funkcji, po której następuje gwiazdka) definiuje funkcję generatora.”