2017-02-12 128 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