【问题标题】:Firefox throwing js error in for loop "allocation size overflow"Firefox 在 for 循环“分配大小溢出”中抛出 js 错误
【发布时间】:2014-12-25 08:22:09
【问题描述】:

下面是我的代码

相同的代码在本地服务器上工作,但在现场不工作。

    htmlC = "";
    htmlC += '<select name="pagenum" id="pagenum" style="width:135px" onChange="setPageSearchValue(this.value)">';
    for(i=1 ; i<=tot_pages ; i++)
    {
            if(i.toString() == document.frmlist.start.value)
            {
                htmlC += "<option value='"+i+"' 'selected' >"+i+"</option>";
            }
            else
            {
                htmlC += "<option value='"+i+"'>"+i+"</option>";
            }
    }   
    htmlC += '</select>';

我尝试找到无限循环但没有成功。完全相同的代码在本地服务器中运行。

【问题讨论】:

  • 您在哪里设置 tot_pages 以及设置为什么值?
  • 其实已经设置好了..我还没有粘贴我所有的代码
  • 对不起,我不清楚。请您与我们分享该代码吗?在上下文中。

标签: javascript for-loop memory-management runtime-error


【解决方案1】:

以这种方式使用字符串连接通常是一个坏主意,尤其是在您不知道要执行的迭代次数的情况下。每次连接字符串时,都会重新分配适合新字符串所需的内存,并且需要对旧字符串进行垃圾收集(出于性能原因,甚至可能在循环期间不会这样做)

var htmlBuffer = [];
htmlBuffer.push('<select name="pagenum" id="pagenum" style="width:135px" onChange="setPageSearchValue(this.value)">');
for(i=1 ; i<=tot_pages ; i++)
{
        if(i.toString() == document.frmlist.start.value)
        {
            htmlBuffer.push("<option value='"+i+"' 'selected' >"+i+"</option>");
        }
        else
        {
            htmlBuffer.push("<option value='"+i+"'>"+i+"</option>");
        }
}   
htmlBuffer.push('</select>');

htmlC = htmlBuffer.join('\n');

上面将定义一个数组,您将每个“行”推到该数组中。它将动态分配扩展数据所需的内存,最后,您为数据总量分配 1 个字符串。这样效率更高。我不知道这是否是您的实际问题(因为我们不知道 tot_pages 是什么),但无论如何避免循环中的字符串连接绝不是一个坏主意。

【讨论】:

    【解决方案2】:

    添加注释,在另一个循环中使用格式错误的 do..while 循环时可能会引发此错误。

    作为记录,以下 sn-p 在删除 i++ 或 while 中的错误条件时可能会引发此错误。

    ["h","e","l","l","o"].forEach(function(e){
        var k = ["w","o","r","l","d"]
        var i = 0
        do 
          k[i] = e+k[i],i++
        while (i < k.length)
        console.log(k)
        })

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-18
      • 2014-06-06
      相关资源
      最近更新 更多