为什么这段代码无限循环?

时间:2016-02-24 22:36:41

标签: javascript

我正在尝试用JavaScript编写一个程序,它生成100个随机数并检查每个程序的素数。程序就是这样做的,除了某些原因它不会停在100并且只是无限循环。我确定我犯了一些简单的新手错误,但由于某种原因我无法看到它。有什么建议吗?

我的代码:

function isPrime(n) {
    if (n < 2 || n % 1)
        return false;

    var r = Math.sqrt(n);

    for (i = 2; i <= r; i++)
        if (n % i === 0)
            return false;

    return true;
}

for (i = 0; i < 100; i++) {
    var temp = Math.floor((Math.random() * 100) + 1);

    if (isPrime(temp))
        console.log(temp + " is a prime number!");
    else
        console.log(temp + " is not a prime number.");
}

谢谢!

2 个答案:

答案 0 :(得分:4)

您需要在for循环中声明i变量:

(var i = 0; i < 100; i++) ...

否则它在全局范围内定义,并在for-loop和isPrime函数之间共享。

答案 1 :(得分:1)

madox2是正确的,你应该在for循环中声明i,但我认为循环本身是无限的原因是因为只在循环中执行i=0,然后{{1}在循环调用的函数中,您每次迭代都重置for (i = 2; i <= r; i++)

您应该更改代码以分别在两个循环的范围内声明i,如下所示:

i