当我运行以下代码时,它会崩溃浏览器或告诉我进程内存不足。我相信我犯了一个错误。以下代码有什么问题:
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);
答案 0 :(得分:8)
您正在减少i
,但会检查n > 1
。
基本上,您已经创建了infinite loop,因为您永远不会减少n
的值。循环中的条件允许执行,直到它们计算为false
。在您的示例中,for循环的condition子句将始终求值为true
,循环将永远继续。
考虑:
for (var i = n; i > 1; i--){
答案 1 :(得分:2)
您的循环将一直运行,直到n > 1
变为false,但n
永远不会更改。