2014-04-25 91 views
1
function*() { .... } 

我刚刚在其他js代码中发现了这种形式的定义,明星的意思是什么呢?谢谢星号在函数定义中的含义是什么,如“function *()”?

+0

什么或者是这个 “其他一些js代码”? – BoltClock

+1

也许[this](http://www.reddit.com/r/javascript/comments/1xpa6q/generator_functions_whats_the_difference_between/)回答你的问题? – maximilianus

+0

也http://stackoverflow.com/a/22004108/1903116 – thefourtheye

回答

1

here

带*标记的函数被称为发电机功能。所述 以下两个一元运算符只允许在发电机功能的直接身体 (即,在体内,但不嵌套在 另一功能):

AssignmentExpression: 
    ... 
    YieldExpression 

YieldExpression: 
    "yield" ("*"? AssignmentExpression)? 

早期引发错误如果收益率或收益率*表达式发生在非生成器函数 中。

另外,还要检查MDNWhat Is This Thing Called Generators?

11

从ES6开始,它将定义一个generator function。 (该链接到老“和谐”维基页面,这可能不再是跟上时代的,因为这已经被折叠成latest specification drafts;目前是14.4节。)

这里有一台发电机的例子:

function* fibonacci() { 
    let [prev, curr] = [0, 1]; 
    for (;;) { 
     [prev, curr] = [curr, prev + curr]; 
     yield curr; 
    } 
} 

各种方式来使用:

随着for-of环(另一ES6的事情,第13.6.4):

for (n of fibonacci()) { 
    // truncate the sequence at 1000 
    if (n > 1000) 
     break; 
    print(n); 
} 

作为一个迭代器:

let seq = fibonacci(); 
print(seq.next()); // 1 
print(seq.next()); // 2 
print(seq.next()); // 3 
print(seq.next()); // 5 
print(seq.next()); // 8 
+0

哦,一个ES6功能。甜。 – BoltClock

相关问题