我需要製作一個函數發生器,迭代無限序列,如斐波那契數列。它應該在調用時返回序列中的下一個值。我給出的函數原型:函數發生器javascript
function genfib() {
return function fib() {
}
}
應該用這樣的:
var fib = genfib();
fib(); // -> returns 0
fib(); // -> returns 1
fib(); // -> returns 1
fib(); // -> returns 2
我感到困惑的是什麼執行每次我打電話fib()
時間。我試圖做類似
function genfib() {
var count = 1;
if (count === 1) {
count++;
yield 0;
}
else if (count === 2) {
count++;
yield 1;
}
var a = 0;
var b = 1;
return function fib() {
while(1) {
count = a + b;
a = b;
b = count;
yield count;
}
}
}
但它不工作。我不知道如何設置它來運行fib
序列中前兩個數字的if/else
,然後爲每個後續調用運行一次while
循環。
你知道'yield'的含義嗎? – ncksllvn 2014-10-30 04:40:18
我認爲它有點像一個返回,只是暫停一個函數,而不是在返回值後終止它 – user137717 2014-10-30 04:42:24
如果這是一個賦值/作業(從「*我給了一個函數原型*」),那麼它看起來像你應該學習關閉。不要用'yield'來編寫生成器。 – Bergi 2014-10-30 05:14:55