2014-02-25 80 views

回答

4

這意味着該函數是一個生成器函數。引用自http://wiki.ecmascript.org/doku.php?id=harmony:generators#syntax

帶*符號的函數被稱爲生成函數。

正常函數執行並返回結果。但是生成器會產生值並等待它們再次被調用。然後該函數將恢復爲其執行。

生成器函數通常是迭代的。因爲,他們產生的值並等待下一個函數調用恢復執行,它們對無限值生成器很有用。

它們也具有記憶效率。例如,假設您想要生成10000000個數字,如果我們將它們存儲在數組中,則可能會耗盡機器的內存。但是如果我們使用一個生成器,我們可以生成一個數字,yield值,當再次調用時,執行將被恢復,並且可以生成下一個數字。

我們可以看一下例子,here

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

正如我所說,發電機被重複這樣

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

見發生器功能實際上有一個無限循環。當執行yield curr時,值將返回n,n of fibonacci()。這用於迭代中,並且當再次調用生成器時,它將恢復執行(它也將變量中的數據保留在變量中)並生成下一個元素。

相關問題