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

JS新手求助:嵌套式随机数生成器调用generateList(6)触发OOM错误

解决嵌套随机数生成器的OOM内存溢出问题

嘿,刚看到你的问题啦!作为JS新手遇到这种内存溢出问题确实挺头疼的,我帮你梳理下问题根源和修复方案~

问题核心:全局变量导致的无限循环

你的代码里两个for循环中的i都没有用var、let或const声明,这会让i变成全局变量。当generateList调用generateTuple时,两个循环会共用同一个全局i,直接打乱了循环的正常逻辑,最终引发无限循环——数组会被不断填充元素,直到浏览器内存耗尽,抛出OOM错误。

举个简单的流程例子:

  1. 调用generateList(6),全局i被设为0,进入第一次循环
  2. 执行generateTuple(),里面的循环把全局i重置为0,加到3后退出循环,此时全局i是3
  3. 回到generateList的循环,执行i++,全局i变成4,满足4<6继续循环
  4. 再次调用generateTuple(),又把全局i重置为0,重复上述流程……循环永远无法走到i=6,数组会无限增长

修复后的代码

我帮你补上了变量声明和遗漏的返回语句,修复后代码如下:

function generateList(num){
    var arr = [];
    // 用let声明局部变量i,避免全局污染
    for(let i=0;i<num;i++){
        arr.push(generateTuple());
    }
    return arr;
}
function generateTuple(){
    var tuple = [];
    // 同样用let声明局部变量i,和外部循环的i互不干扰
    for(let i=0;i<3;i++){
        tuple.push(Math.floor(Math.random() * 300));
    }
    return tuple; // 你之前的代码漏了这个返回语句哦!
}

关键修复点说明

  • 用let声明循环变量:let会创建块级作用域的变量,每个循环的i都是各自函数内的局部变量,不会互相干扰,保证两个循环都能正常执行指定次数。
  • 补上return tuple;:如果没有返回语句,generateTuple默认返回undefined,你生成的数组里会全是undefined,这个小疏漏也一起修正了。

现在调用generateList(6),应该能正常生成包含6个三元随机数组的列表啦,不会再出现内存溢出问题~

内容的提问来源于stack exchange,提问作者shem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:29:06