1

当我运行下面的代码时,它会导致浏览器崩溃或告诉我进程内存不足。我相信我犯了一个错误。以下代码有什么问题:

var primes = new Array();
var nonprimes = new Array();

var factor = function(n){
    for (var i = n; n > 1; i--)
    {
        if (n%i === 0 || n !== i){
            primes.push(i);
        }else{nonprimes.push(i);}
    }
}
factor(2);
console.log(primes);
4

2 回答 2

8

您正在减少i但检查是否n > 1.

本质上,您创建了一个无限循环,因为您从不减少n. 循环内的条件允许执行,直到它们评估为false。在您的示例中, for 循环的条件子句将始终评估为true并且循环将永远继续。

考虑:

for (var i = n; i > 1; i--){
于 2013-06-26T02:04:04.433 回答
2

您的循环将继续运行,直到n > 1变为 false,但n永远不会改变。

于 2013-06-26T02:04:08.700 回答