我需要制作一个函数发生器,迭代无限序列,如斐波那契数列。它应该在调用时返回序列中的下一个值。我给出的函数原型:函数发生器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