我可以使用ES6的箭头函数语法与发电机? (箭头符号)
即我如何expression这一点:
function *(next) {}
与箭头。 我已经尝试了所有我能想到的组合,而且我也找不到任何文档。
(目前使用节点v0.11.14)
我可以使用ES6的箭头函数语法与发电机?
你不能。 抱歉。
根据MDN
function*
语句(function
关键字后跟一个星号)定义了一个生成器函数。
从规格文件 (我强调):
函数语法扩展为添加一个可选的
*
标记:
FunctionDeclaration: "function" "*"? Identifier "(" FormalParameterList? ")" "{" FunctionBody "}"
内联函数和箭头函数的区别
首先, 箭头函数 () => {}
不能取代内联函数function(){}
,它们是不同的。 内联函数只是函数,所以问题是箭头函数和内联函数之间的区别。
与函数expression式相比,箭头函数expression式(也称为箭头函数)具有更短的语法,并且不绑定它自己的
this
,arguments
,super
或new.target
)。 箭头function始终是匿名的。
这里有更多快速的细节
为什么箭头函数不能用作生成器
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions
使用yield关键字
yield关键字不能在箭头函数的主体中使用(除非在其内嵌的函数中允许)。 因此,箭头函数不能用作生成器。
请注意,没有yield
发电机没有意义。
为什么箭头函数不能使用yield
http://tc39wiki.calculist.org/es6/arrow-functions/
箭头函数将
this
词法绑定,在块体的情况下绑定return
,所以它从立即封闭的箭头函数返回,并排除了break
和continue
在直接封闭的箭头函数之外的引用语句。标识符主expression式
arguments
不能在箭头函数的主体中使用(无论是expression式还是块forms)。同样,
yield
可能不会用在箭头函数的主体中。 箭头不能是生成器,我们不希望深度延续。
在箭头函数中的产量将引发语义错误: http : //www.ecma-international.org/
最后,ECMA6的实施非常复杂。 C#不允许出于类似的原因 。
除了上述2013年11月 esdiscuss.org和Ecma TC39委员会ES6会议logging的讨论之外,发电机箭头还在2016年9月的两次ES7会议中重新讨论[1] [2] 。 在讨论了各种语法(主要是=*>
和=>*
)的优缺点以及缺乏对此function的理由和用例之后,他们得出结论:
- 委员会有一些兴趣,但担心该function不会增加新的语法
- 计划在第3天重新审视,看看我们是否能够至less阶段0,作为[Domenic Denicola]的asynchronous迭代build议的一部分
发电机箭头的提议被移到了第一阶段,Brendan Eich和Domenic Denicola成为冠军,但是还没有相关的tc39 /提案回购。 我假设有更多的消息,我们必须等到第三阶段的asynchronous迭代scheme完成。