2017-02-12 72 views
0
for (i=0;i<channelName.length;i++) { 
     if (channelName[i]=="channel"||channelName[i]=="user") { 
     checkUserDuplicate(channelName[i]); 
    } 
} 

此循环在所有浏览器中导致“内存不足”崩溃。谁能看到为什么?它似乎在IF语句崩溃,然后以某种方式导致无限循环。JS循环正在循环和崩溃的浏览器?

如果您想知道代码的作用,它会在未定义长度的数组中找到关键字“channel”和“user”,然后在下一个位置获取该字符串。

任何帮助将不胜感激,因为我一直坐在这里困惑了2个小时。

编辑:频道名称就像http://www.youtube.com/user/username

这个网址的功能是:

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);} 

}

这是一个烂摊子:)

+2

什么的'checkUserDuplicate'的代码?我猜'我'是一个全局变量,你正在探讨它在这个函数中的价值吗?确切地说,请声明你的变量。 – Teemu

+1

不符合当前显示的内容。 'channelName'的价值和多大? 'checkUserDuplicate'做了什么(*我假设这是循环以及可能导致无限循环*)? –

+0

@Teemu对不起,不,它不是一个全局变量。代码非常长。 – LewisHarris

回答

0

在checkUserDuplicate功能它计算量的DIV在一个范围内。如果没有类或DIV,则count为0,并传递给for循环并创建一个递归循环。

1

在你的for循环中,如果你没有指定var i = 0;,那么它是全局可访问的。在你的其他函数中,你可以修改i的值,并且不会像预期的那样增加一个无限循环。

对不起,我没看过代码,因为它是相当混乱,但可能是原因

+0

对啊哈哈对不起这个混乱的代码。我只是总是写这样浓缩,没理由但只要我知道这意味着什么:D – LewisHarris

+0

@LewisHarris所以..是这样的原因吗? – LYu

+0

不是。问题出在idArray.length是== 0,所以导致了无限循环。在执行这段代码之后,我不知道idArray获取数组日期。 – LewisHarris