Raj*_*har 6 javascript for-loop memory-management runtime-error
以下是我的代码
相同的代码在本地服务器中工作,但不在实时.
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>';
Run Code Online (Sandbox Code Playgroud)
我试过找到无限循环但没有成功.完全相同的代码在本地服务器中工作.
jis*_*shi 17
以这种方式使用字符串连接通常是个坏主意,特别是如果您不知道将要执行的迭代次数.每次连接一个字符串时,你将重新分配适合新字符串所需的内存,并且需要对旧字符串进行垃圾收集(出于性能原因,在循环期间甚至可能不会这样做)
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');
Run Code Online (Sandbox Code Playgroud)
上面将定义一个数组,将每个"行"推到其上.它将动态分配扩展数据所需的内存,最后,为总数据量分配1个字符串.这样效率更高.我不知道这是否是您案例中的实际问题(因为我们不知道tot_pages是什么),但是无论如何避免循环中的字符串连接绝不是一个坏主意.