You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 10:32:37