【发布时间】:2017-02-12 18:57:27
【问题描述】:
for (i=0;i<channelName.length;i++) {
if (channelName[i]=="channel"||channelName[i]=="user") {
checkUserDuplicate(channelName[i]);
}
}
此循环导致所有浏览器中的“内存不足”崩溃。谁能明白为什么?它似乎在 IF 语句处崩溃,然后以某种方式导致无限循环。
如果您想知道代码的作用,它会在未定义长度的数组中查找关键字“channel”和“user”,然后在下一个位置获取字符串。
任何帮助将不胜感激,因为我已经在这里困惑了 2 个小时。
编辑:channelName 是一个类似 http://www.youtube.com/user/username 的 URL
这是函数:
function checkUserDuplicate(channelName) {
var idarray=[];match=0;$('.channels').each(function(){idarray.push(this.id)});
for (i=0;i<idarray.length;i++) {
var current=channelName.toLowerCase();compare=idarray[i].toLowerCase();
if (current==compare) {callError(channelName+" already exists in this collection");match=1;}
} if (match==0) {checkExists(channelName);}
}
一团糟:)
【问题讨论】:
-
checkUserDuplicate的代码是什么?我猜i是一个全局变量,你在那个函数中改变它的值?没错,请声明你的变量。 -
与当前显示的内容不同。
channelName的价值和大小是多少?checkUserDuplicate做了什么(我假设它也在循环并可能导致无限循环)? -
@Teemu 抱歉,不,它不是全局变量。代码非常长。
-
@SpencerWieczorek 我现在会仔细检查一下
-
那么他们可能共享相同的范围。请添加一个我们可以重现问题的示例。
标签: javascript arrays loops memory crash