一个Javascript的生成器函数是这样的:
function *gen(n) {
for (let i = 0; i < n; i++) {
yield i;
}
}
[...gen(10)]
//
Javascript在声明的时候要多加一个星号。如果不加星号,会报SyntaxError。
一个python的生成器函数是这样的:
def gen(n):
for i in range(n):
yield i
>>> list(gen(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
python在声明的时候不需要额外标识。直接用yield就行了。
两个语言都用了yield关键词,工作原理也几乎相同,甚至可以说Javascript就是抄的python。那为什么Javascript反而要多加一个星号呢?这个星号有什么意义?为什么要这样设计?是Javascipt太特殊,还是python太特殊?
我相信这应该是有原因的,毕竟ES2015的制定过程相当和谐(字面意义上的)