【问题标题】:Error with loops in javascript?javascript中的循环错误?
【发布时间】:2011-04-12 13:21:57
【问题描述】:

在我的代码的多个部分,我有类似这样的片段:

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 循环。我显然没有做正确的事情。我是一个自以为是的 Javascripter(基本上是在谷歌上搜索我不知道的任何东西,我从来没有上过课)。我一定遗漏了一些关于 for 循环的内容。

谢谢!

【问题讨论】:

  • 为什么 +1nni&lt;currentSession.Questions.length+1 中?这不会超过循环的结尾吗?也许这会导致异常;检查 JS 控制台。

标签: javascript iterator


【解决方案1】:

您的 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,因此成为范围问题的唯一方法是在循环运行时在循环外更改变量。我认为这不太可能。
【解决方案2】:

JS 控制台报告什么?

如果您不知道 JS 控制台是什么,请在 Google 上搜索,或者在您的函数中添加异常处理程序:

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 变量。

【讨论】:

    【解决方案3】:
    for (var nni=0;nni<currentSession.Questions.length+1;nni++) {
        currentPoints+=currentSession.Questions[nni].Score;
    }
    

    应该是这样的,你没有声明变量nni。还是你没有越界?

    nni<currentSession.Questions.length+1?
    

    【讨论】:

    • 我不认为他有范围问题,而所有的 'var' 都可以真正帮助解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多