У меня тоже был такой же вопрос и я пришел сюда. После прочтения постов и комментариев я почувствовал, что использование генератора в функции со стрелкой выглядит расплывчато:
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
Это может быть главной причиной того, что они не реализовали генератор в связи с функцией стрелки.
Но если бы я был одним из них, я мог бы подумать так:
const generator = gen param => ... // hmm, gen indicates a generator
const generator = gen () => ... // ^^
Это похоже на то, что у нас есть асинхронная функция:
const asyncFunction = async () => ... // pretty cool
Потому что с нормальной функцией асинхронный существует ключевое слово , поэтому функция стрелки его использует - async () =>
скорее всего, покажется async function()
.
Но нет такого ключевого слова, как gen
or, generator
и, увы, функция стрелки его не использует.
Заключить:
Даже если они хотят реализовать генератор в функции стрелки, я думаю, что им нужно пересмотреть синтаксис генератора в ядре js:
generator function myfunc() {}
// rather than
function* myfunc() {} // or, function *myfunc() {}
И это будет большой ошибкой. Таким образом, держать стрелку подальше от генератора довольно круто.
После комментария @Bergi :
Нет. Предполагается, что функции со стрелками должны быть легкими (и не иметь, например, .prototype) и часто однострочными, в то время как генераторы в значительной степени противоположны.
Я скажу, что целью генератора является запуск-остановка-запуск, и поэтому я не думаю, что нам нужно заботиться о прототипе, лексическом этом и т. Д.
function*
Оператор (ключевое слово функции, за которым следует звездочка) определяет функцию генератора».