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

时间:2015-07-17 19:29:02

标签: javascript for-loop while-loop

当尝试下面的代码作为欧拉项目问题的解决方案时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);
}

2 个答案:

答案 0 :(得分:4)

因为如果第一次for不是0,你就会突破i % n循环。并且您从未将divisible设置为true - divisible === truedivisible = true

不同

答案 1 :(得分:0)

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

console.log