下面是我的代码
相同的代码可以在本地服务器上运行,但不能在实时运行。
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>';
我试过寻找无限循环但没有成功。非常相同的代码在本地服务器上运行。
最佳答案
以这种方式使用字符串连接通常不是一个好主意,尤其是当您不知道要执行的迭代次数时。每次连接字符串时,都会重新分配适合新字符串所需的内存,并且需要对旧字符串进行垃圾回收(出于性能原因,这甚至可能不会在循环期间完成)
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 是什么),但无论如何避免循环中的字符串连接从来都不是一个坏主意。
关于javascript - Firefox 在 for 循环中抛出 js 错误 "allocation size overflow",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27645489/