为什么我的JavaScript代码中存在潜在的无限循环?

时间:2016-07-06 15:14:22

标签: javascript

我希望找到从1到N定义的范围之间的所有素数之和。 当我使用值3调用sumPrimes函数时,代码给出了一个无限循环。我调试了代码并发现它仅对数字3执行此操作。对于高于2的任何其他数字,它不会这样做。

JavaScript的:

function sumPrimes(num) { 
    var sum=0;
    for (i = 2; i <= num; i++) {
        if (checkPrime(i)) {
            sum += i;
        }
    }

    return sum;
}

function checkPrime(num) {
    for (i = 2; i <= Math.sqrt(num); i++) {
        if (num % i === 0) {
            return false;
        }
    }

    return true;
}

2 个答案:

答案 0 :(得分:4)

因为您必须使用i声明var:它会使其成为函数的本地。

for (var i = 2; i <= num...

否则这两个函数使用相同的全局变量。

如果您想避免此类错误,请使用strict modeJavaScript Use Strict

您只需将"use strict";放在.js文件的顶部。

答案 1 :(得分:1)

您尚未声明Button的范围,这意味着两个循环将继续在全局范围内重置i的值,从而导致循环无休止地继续。

i添加到两个函数的顶部,问题将消失。