2014-04-25 81 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

相關問題