以下是我的代码
相同的代码在本地服务器中工作,但不在实时。
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>';
我试过找到无限循环但没有成功。完全相同的代码在本地服务器上工作。
答案 0 :(得分:16)
以这种方式使用字符串连接通常是一个坏主意,特别是如果您不知道将要执行的迭代次数。每次连接一个字符串时,你将重新分配适合新字符串所需的内存,并且需要对旧字符串进行垃圾收集(出于性能原因,这可能甚至不会在循环期间完成)
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是什么),但是无论如何避免循环中的字符串连接绝不是一个坏主意。
答案 1 :(得分:1)
添加注释,在另一个循环中使用格式错误的 do..while 进行循环时,可能会抛出此错误。
对于记录,以下代码段在删除 i ++ 时会抛出此错误,或者时中的错误情况。
.so