<p>斐波那契迭代器是符合ES6协议、按需生成数列的轻量对象,可用手写next()方法或更推荐的function* generator实现,支持无限序列、for...of遍历及take等安全截断操作。</p>

JavaScript 中可以用迭代器(Iterator)优雅地生成斐波那契数列,既节省内存又支持按需取值,适合处理无限序列或大数据场景。
什么是斐波那契迭代器
斐波那契迭代器是一个符合 ES6 迭代器协议的对象,即拥有 next() 方法,每次调用返回形如 { value: number, done: boolean } 的对象。它不预先计算全部数值,而是每次调用时才生成下一个斐波那契数。
基础实现:手写迭代器对象
直接返回一个带 next() 方法的对象即可:
function fibonacciIterator() {
let a = 0, b = 1;
return {
next() {
const current = a;
[a, b] = [b, a + b];
return { value: current, done: false };
}
};
}
<p>// 使用示例
const fib = fibonacciIterator();
console.log(fib.next().value); // 0
console.log(fib.next().value); // 1
console.log(fib.next().value); // 1
console.log(fib.next().value); // 2</p>进阶写法:使用 Generator 函数(推荐)
Generator 是更简洁、更符合语义的迭代器实现方式,用 function* 定义,配合 yield 关键字逐个产出值:
立即学习“Java免费学习笔记(深入)”;
function* fibonacci() {
let a = 0, b = 1;
while (true) {
yield a;
[a, b] = [b, a + b];
}
}
<p>// 使用示例
const fibGen = fibonacci();
console.log(fibGen.next().value); // 0
console.log(fibGen.next().value); // 1
console.log(fibGen.next().value); // 1
console.log(fibGen.next().value); // 2</p><p>// 也可用 for...of 遍历(注意:无限循环,需加退出条件)
for (const num of fibonacci()) {
if (num > 100) break;
console.log(num); // 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89
}</p>实用技巧:限制长度或按需截取
实际开发中常需取前 N 项,可用扩展运算符或辅助函数封装:
- 取前 10 项:[...fibonacci()].slice(0, 10)
- 安全截断(避免无限展开):Array.from({ length: 10 }, (_, i) => fibGen.next().value)
- 封装成可复用函数:function take(iter, n) { const arr = []; for (let i = 0; i










