【发布时间】:2014-10-30 04:32:48
【问题描述】:
我需要制作一个迭代无限序列的函数生成器,比如斐波那契数列。它应该在调用时返回序列中的下一个值。我得到了一个函数原型:
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是做什么的吗? -
我认为这有点像 return 只是暂停一个函数而不是在返回一个值后终止它
-
如果这是一个作业/家庭作业(来自“我得到了一个函数原型”),那么看起来你应该学习闭包。不要用
yield编写生成器。 -
如果我们的回答对您有所帮助,请将其中一个答案标记为正确。
-
@user137717: 差不多 :) 但是是的,该方法存根是使用闭包的明确提示。
标签: javascript generator