如何定义每次调用返回下一个斐波那契数的JavaScript fib()函数?
符合要求的斐波那契函数实现
直接使用立即执行函数表达式(IIFE)封装状态,让fib本身就是每次调用能返回下一个斐波那契数的函数,代码如下:
const fib = (() => { let a = 0, b = 1; return () => { const current = a; // 更新斐波那契数列的下一组值 [a, b] = [b, a + b]; return current; }; })();
为什么这个写法符合要求:
- 全局作用域仅注入了
fib这一个函数名,无额外变量或属性 - 闭包内部的
a和b作为状态变量,每次调用fib()都会更新并返回下一个斐波那契数 - 调用方式直接是
fib(),第一次返回0,第二次返回1,第三次返回1,第四次返回2,以此类推,完全匹配需求
之前写法的问题:
- 写法1和写法2中的
fib都是工厂函数,调用fib()会返回新的生成器函数,而非直接返回斐波那契数,不符合“每次调用fib()返回下一个数”的要求 - 写法1额外定义了
getNextFib变量,违反了“仅将fib函数名注入全局作用域”的限制
内容的提问来源于stack exchange,提问作者Serhiy
相关产品推荐
相关产品推荐

