Eloquent JavaScript第四章练习遇内存溢出问题求助
问题分析与修复方案
你遇到的内存溢出问题,根源在start > end分支的循环逻辑里:
当调用range(35, 30, -1)时,step参数是-1,循环里写的是i -= step。计算一下:i -= -1等价于i = i + 1——这会让i从35开始不断变大,永远不会小于30,循环根本停不下来,数组all被疯狂填充,最终触发内存溢出。
正确的做法是,不管step是正还是负,循环里统一用i += step,因为step本身已经包含了方向信息。另外把全局的all数组移到函数内部,避免多次调用时数据混乱。
修复后的代码:
function range(start, end, step = 1) { const all = []; if (start < end) { for (let i = start; i <= end; i += step) { all.push(i); } } else if (start > end) { for (let i = start; i >= end; i += step) { all.push(i); } } else { throw new Error("Start is equal to End or something else went wrong! Check your input"); } return all; } console.log(range(35, 30, -1)); // 输出 [35, 34, 33, 32, 31, 30]
这样调用range(35, 30, -1)时,i每次加上-1(也就是减1),从35逐步降到30,循环正常终止,数组也能正确生成。
内容的提问来源于stack exchange,提问作者Jim Christiano
相关产品推荐
相关产品推荐

