为什么我的javascript for循环没有做任何事情,而是冻结了我的网页?

为什么我的javascript for循环没有做任何事情,而是冻结了我的网页?,javascript,loops,if-statement,dom,Javascript,Loops,If Statement,Dom,我很难弄清楚为什么我的代码不能工作。这是一个非常简单的程序,所以我肯定有一些东西我遗漏了或没有看到,但我似乎无法理解。请帮忙 它应该做的是:取两个数,找出下一个大于第一个数的数,也可以被第二个数整除 发生了什么:它基本上只是冻结了我的电脑,似乎循环只是继续运行,没有停止 JS: HTML: 让我们算算吧! 输入两个数字,让我们算出下一个 大于这两个数字的数字,但有一个捕获… 这个数字必须能被你选择的第二个数字整除。 第一个号码: 第二个号码: 去 您正在为(var i=fi

我很难弄清楚为什么我的代码不能工作。这是一个非常简单的程序,所以我肯定有一些东西我遗漏了或没有看到,但我似乎无法理解。请帮忙

它应该做的是:取两个数,找出下一个大于第一个数的数,也可以被第二个数整除

发生了什么:它基本上只是冻结了我的电脑,似乎循环只是继续运行,没有停止

JS:

HTML:


让我们算算吧!
输入两个数字,让我们算出下一个
大于这两个数字的数字,但有一个捕获…
这个数字必须能被你选择的第二个数字整除。
  • 第一个号码:
  • 第二个号码:

您正在为(var i=firstNum+1;i>firstNum;i++)使用
,并且此条件将始终满足。因此,它将无休止地循环

试试这个:

 for (var i = firstNum + 1; ; i++) {
        if (i % secondNum === 0) {
            document.getElementById('result').innerHTML = I;
              break;
        }
    }

问题:问题是您的条件语句,因为循环总是
true
,这会导致无限循环,因此是无响应页面。 在这种情况下,也不需要为函数取参数

解决方案:

这个问题可以用数学方法解决,不需要循环

// BEST APPROCH
function divisibleBy() {
    var firstNum = parseInt(document.getElementById('firstNumber').value);
    var secondNum = parseInt(document.getElementById('secondNumber').value);
    
    var result = secondNum*parseInt(firstNum/secondNum+1);
    document.getElementById('result').innerHTML = result;
    
}

但是如果您真的需要使用循环,这里是解决方案,但是请记住,for循环设置中的限制几乎与上面的解决方案相同(或者在你的
循环中为
设置条件为
i,通过执行
i++
,你不断增加
i
。你告诉它在
i>firstNum
时继续运行。它永远不会停止。也许你是想使用
i,我最终使用了一个while循环,我做了firstNum%secondNum!=0,然后增加了i,谢谢你。)或者您的帮助!@BLEXT当输入的
firstNumber
大于
2*secondNumber
时,该循环将无法达到功能目的,例如:
firstNumber=12
secondNumber=4
循环现在甚至不会以
12开始,当您想到它时,它只会给出
2*secondNum>的答案
并且只有在
firstNum
大于
secondNum
的一半的情况下,通过额外计算loop.yes,我们才能删除该条件并使用break
 for (var i = firstNum + 1; ; i++) {
        if (i % secondNum === 0) {
            document.getElementById('result').innerHTML = I;
              break;
        }
    }
// BEST APPROCH
function divisibleBy() {
    var firstNum = parseInt(document.getElementById('firstNumber').value);
    var secondNum = parseInt(document.getElementById('secondNumber').value);
    
    var result = secondNum*parseInt(firstNum/secondNum+1);
    document.getElementById('result').innerHTML = result;
    
}
// WORST APPROCH
function divisibleBy() {
    var firstNum = parseInt(document.getElementById('firstNumber').value);
    var secondNum = parseInt(document.getElementById('secondNumber').value);
    
    for (var i = firstNum+1; i <= secondNum*(firstNum/secondNum+1); i++) {
        if (i % secondNum === 0) {
            document.getElementById('result').innerHTML = i;
            break;  
        }
    }
}
// BEST LOOP/SIMPLE APPROCH 
function divisibleBy() {
    var firstNum = parseInt(document.getElementById('firstNumber').value);
    var secondNum = parseInt(document.getElementById('secondNumber').value);
    
    do{
        firstNum++;
    }
    while(firstNum%secondNum != 0)
    document.getElementById('result').innerHTML = firstNum;
}