我可以在生成器中使用ES6的箭头函数语法吗?(箭头表示法)

也就是说,我如何表达

function *(next) {}

使用箭头语法?我已经尝试了所有我能想到的组合,但我找不到任何关于它的文档。

(我目前正在使用Node.js v0.11.14。


答案 1

我可以在生成器中使用ES6的箭头函数语法吗?

你不能。不好意思。

根据MDN

语句(关键字后跟星号)定义了生成器函数。function*function

规范文档(我的强调):

函数语法已扩展为添加可选标记:*

FunctionDeclaration: "function" "*"? Identifier "(" FormalParameterList? ")" 
  "{" FunctionBody "}"

答案 2

内联函数和箭头函数之间的区别

首先,Arrow函数不是用来取代内联函数的,它们是不同的。内联函数只是函数,所以问题是箭头函数和内联函数之间的区别是什么。() => {}function(){}

与函数表达式相比,箭头函数表达式(也称为箭头函数)具有较短的语法,并且不绑定自己的 、 、 或 )。箭头函数始终是匿名的。thisargumentssupernew.target

更多快速详细信息,请单击此处


为什么箭头函数不能用作生成器

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions

使用收益率关键字

yield 关键字不能在箭头函数的主体中使用(除非允许在进一步嵌套在其中的函数中使用)。因此,箭头函数不能用作生成器。

请注意,没有生成器是没有意义的。yield


为什么 Arrow 函数不能使用收益率

http://tc39wiki.calculist.org/es6/arrow-functions/

箭头函数按词法绑定,在 Block 正文情况下绑定,以便它从立即封闭的箭头函数返回,并排除和引用立即封闭箭头函数之外的语句。thisreturnbreakcontinue

标识符主表达式不能在箭头函数的主体(无论是表达式还是块形式)中使用。arguments

同样,不能在箭头函数的主体中使用。箭头不能成为生成器,我们不希望深度延续。yield

箭头函数中的 yield 将引发语义错误:http://www.ecma-international.org/

最后,原因在于 ECMA6 的实施非常复杂。出于类似的原因,C#也不允许这样做。