为什么以下javascript会导致无响应脚本错误?

为什么以下javascript会导致无响应脚本错误?,javascript,for-loop,while-loop,Javascript,For Loop,While Loop,尝试以下代码作为Euler项目问题5的解决方案时。问题是找到一个最小的数,它可以被1到20之间的所有数等分。每次运行时,它都会显示“无响应脚本”窗口,我需要实际停止脚本运行。似乎是什么原因导致它挂起来了,但我不太明白是什么原因。“警报”窗口似乎指向while()开始的那一行出现错误,但我看不出有任何问题。如果它看起来可以工作,我希望有人在他们的机器上尝试一下,看看它是否工作。这样我就可以把它作为一个局部问题来解决。欢迎所有建议 var divisible = false; var n = 252

尝试以下代码作为Euler项目问题5的解决方案时。问题是找到一个最小的数,它可以被1到20之间的所有数等分。每次运行时,它都会显示“无响应脚本”窗口,我需要实际停止脚本运行。似乎是什么原因导致它挂起来了,但我不太明白是什么原因。“警报”窗口似乎指向while()开始的那一行出现错误,但我看不出有任何问题。如果它看起来可以工作,我希望有人在他们的机器上尝试一下,看看它是否工作。这样我就可以把它作为一个局部问题来解决。欢迎所有建议

var divisible = false;
var n = 2520; // first number divisible by all numbers 1-10

while(divisible === false){ // something wrong here??
    n += 2520;
    for(var i = 11; i < n; i++) {

        if(i % n !== 0){ 
            break; 
        }
        if(i === 20) {
            divisible === true;
        }
    }
}
if(divisible === true){
    return console.log("Answer: " +i);
}
var divisible=false;
变量n=2520;//可被所有数字1-10整除的第一个数字
而(可除===false){//这里有什么问题吗??
n+=2520;
对于(变量i=11;i
因为如果
i%n
不是第一次为0,您就打破了
for
循环。而且你从来没有将
可除性
设置为
true
-
可除性===true
可除性=true
不一样,因为如果
i%n
不是第一次为0,你就中断了
for
循环。而且你从未将
可除性
设置为
-
可除性===真
可除性=真

在原始代码中有几个错误,一些错误在上面的答案中指出。要使它工作,需要几个修复程序。 首先,必须使用
for循环
中的赋值运算符
=
将布尔值
可除
正确设置为
,而不是
=
,后者仅用于检查两个值是否严格属于同一类型和值。 下一个问题是for循环的条件部分
i
应该是
i<20
,因为循环正在检查11到20之间的数字是否平均划分为
n
。使代码正确运行的最后一个修复方法是条件的顺序,如果第一个
if
语句应该读取
if(n%i!==0)
而不是
如果(i%n!==0)
。我认为这可能是导致代码崩溃并在浏览器中生成“无响应脚本”警报的特定部分。 这是固定代码

var divisible = false;
var n = 2520; // smallest number divisible by all numbers 1-10

while(divisible === false){
    n += 2520; // increment n on each new pass
    // loop numbers between 11 and 20 
    for(var i = 11; i <= 20; i++) {

        if(n % i !== 0){ // check if i divides equally into n
        // if not break out of current loop and start again 
            break; 
        }
        // if i reaches 20 then all the numbers divided equally into n
        if(i === 20) {
        // set value of divisible to true to cancel while loop
            divisible = true;
        }
    }
}
// return the last value of n
return console.log("Answer: " +n);
var divisible=false;
变量n=2520;//可被所有数字1-10整除的最小数
while(可除===false){
n+=2520;//每次新传递时增加n
//循环编号介于11和20之间

对于(var i=11;i原始代码中有几个错误,上面的答案中指出了一些错误。要使其正常工作,需要几个修复程序。 首先,必须使用
for循环
中的赋值运算符
=
将布尔值
可除
正确设置为
,而不是
=
,后者仅用于检查两个值是否严格属于同一类型和值。 下一个问题是for循环的条件部分
i
应该是
i<20
,因为循环正在检查11到20之间的数字是否平均划分为
n
。使代码正确运行的最后一个修复方法是条件的顺序,如果第一个
if
语句应该读取
if(n%i!==0)
而不是
如果(i%n!==0)
。我认为这可能是导致代码崩溃并在浏览器中生成“无响应脚本”警报的特定部分。 这是固定代码

var divisible = false;
var n = 2520; // smallest number divisible by all numbers 1-10

while(divisible === false){
    n += 2520; // increment n on each new pass
    // loop numbers between 11 and 20 
    for(var i = 11; i <= 20; i++) {

        if(n % i !== 0){ // check if i divides equally into n
        // if not break out of current loop and start again 
            break; 
        }
        // if i reaches 20 then all the numbers divided equally into n
        if(i === 20) {
        // set value of divisible to true to cancel while loop
            divisible = true;
        }
    }
}
// return the last value of n
return console.log("Answer: " +n);
var divisible=false;
var n=2520;//可被所有数字1-10整除的最小数字
while(可除===false){
n+=2520;//每次新传递时增加n
//循环编号介于11和20之间

对于(var i=11;感谢您指出这些明显的错误。我当然发现了一些其他错误,例如循环条件中的
n
而不是
20
。真不敢相信我错过了!但是,
中断
是为了在为
n
的每个新值找到第一个不可除数字时取消循环。如果
i
达到20的值,我们知道所有的数字都被等分为
n
的值,因此可以将
可除的
设置为true并返回
n
。我相信它现在可以按预期工作,所以我将在下面的回答中发布工作代码。感谢您指出这些明显的错误。当然,我还发现了一些其他的循环,比如循环条件中的
n
而不是
20
。真不敢相信我错过了!但是,
break
是为了在为
n
的每个新值找到第一个不可整除的数字时取消循环。如果
I
的值达到20,我们就知道所有的数字在该迭代中被平均划分为
n
的任何值,因此可以将
可除
设置为true并返回
n
。我相信它现在可以按预期工作,因此我将在下面的回答中发布工作代码。