2011-04-12 64 views
0

我,在我的代碼多個部分,snippits與此類似:JavaScript中的循環出錯?

function updateScore() { 
    var currentPoints=0; 
    for (nni=0;nni<currentSession.Questions.length+1;nni++) { 
     currentPoints+=currentSession.Questions[nni].Score; 
    } 
    alert('hi'); 
    document.getElementById('quiz_score').innerHTML='%'+(currentPoints/currentSession.TotalPoints)*100 
} 

一切正常......直到循環後。這在多種情況下發生。在循環結束後,警報甚至不會顯示。這就像功能剛剛停止...

我也有問題迭代器(在這種情況下,nni)保持全球。基本上,我不能在代碼中再次使用該變量,因爲由於某種原因,如果我更改nni,它會弄亂for循環。我似乎沒有做正確的事情。我是一個自我認識的人(基本上使用谷歌搜索我不知道的東西,我從來沒有上過課)。我一定錯過了一些關於循環的東西。

如果可以的話,謝謝!

+7

爲什麼'nni 2011-04-12 13:23:18

回答

1

什麼是JS控制檯報告?

如果你不知道什麼JS控制檯,谷歌,或添加一個異常處理程序給你的函數:

function updateScore() { 
    try { 
     var currentPoints=0; 
     for (nni=0;nni<currentSession.Questions.length+1;nni++) { 
      currentPoints+=currentSession.Questions[nni].Score; 
     } 
     alert('hi'); 
     document.getElementById('quiz_score').innerHTML='%'+(currentPoints/currentSession.TotalPoints)*100 
    } catch (err) { 
     alert('Error ' + err.name + ': ' + err.message); 
    } 
} 

此外,你讓循環走得太遠;你應該停在.length,而不是在.length + 1.

正如其他人已經注意到的那樣:你應該使用var真正聲明你的nni變量。

1
for (var nni=0;nni<currentSession.Questions.length+1;nni++) { 
    currentPoints+=currentSession.Questions[nni].Score; 
} 

它應該是這樣的,你沒有聲明變量nni。還是你沒有出界?

nni<currentSession.Questions.length+1? 
+0

我不認爲他有一個範圍問題,這是所有'VAR'將真正幫助。 – MacAnthony 2011-04-12 13:28:29

2

nni變量是全球性的,因爲它不與var關鍵字聲明:

function updateScore() { 
     var currentPoints = 0; 
     // nni declared with var: 
     for (var nni = 0; nni < currentSession.Questions.length + 1; nni++) { 
      currentPoints += currentSession.Questions[nni].Score; 
     } 

     alert('hi'); 
     document.getElementById('quiz_score').innerHTML= '%' + ((currentPoints/currentSession.TotalPoints) * 100) 
    } 

此外,您的評價語句運行與增量每次。移動你的長度評估到你的聲明:

for (var nni = 0, len = currentSession.Questions.length + 1; nni < len; nni++) { 
+0

我不認爲這是一個範圍問題。由於它被分配給= 0,所以它成爲一個範圍問題的唯一方法是在循環運行時將變量在循環外改變。我認爲這不太可能。 – MacAnthony 2011-04-12 13:30:16