2013-12-18 50 views
0

所以這段代碼被公佈在同一個地方之前,作爲一個ES6發生器的例子:Es6發電機:i + =收益i;

function *addGenerator() { 
    var i = 0; 
    while (true) { 
    i += yield i; 
    } 
} 

var gen = addGenerator(); 
console.log(gen.next().value); 
console.log(gen.next(3).value); 
console.log(gen.next(5).value); 

其中給出:0, 3, 8

我不明白爲什麼這個+= yield i的作品。我想這是因爲我們等待,直到我們獲得下一個值,並且如果你通過了next()這是一個隱含的回報。到現在爲止還挺好。但爲什麼是var i的名字?

如果我做的:

function *addGenerator() { 
    var i = 0; 
    var j = 0; 
    while (true) { 
    i += yield j; 
    } 
} 

它不工作,所以有一些特殊之處,無功...誰知道呢?

+0

在第二個例子中,你會得到'0 0 0'作爲輸出,因爲'gen.next()value'是。 j變量的值 - 這是'0' - 你不會在循環中分配它。 – kamituel

+0

啊數字,但如何將next()的值傳入生成器工作? –

+0

它從'yield'返回。 – kamituel

回答

2

在第二個示例中,您將獲得0 0 0作爲輸出,因爲gen.next().valuej變量的值 - 這是0 - 您不會在循環中分配給它。

yield關鍵字的一般形式可以看成是這樣的:

var passedToNext = yield returnThisAsNext_value; 
相關問題