2013-06-26 35 views
1

当我运行下面的代码时,它崩溃了浏览器或告诉我该进程已经耗尽内存。我相信我犯了一个错误。什么是与下面的代码的问题:你减少i但检查是否n > 1Javascript代码内存不足

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); 
+2

你有'n> 1'。我认为它应该是'i> 1' – Gohn67

+4

提示:'new Array()'→'[]'。另外,'n!== i'对于'i'的许多值来说是'true'。 – Ryan

回答

8

本质上,您创建了infinite loop,因为您永远不会减少n的值。循环内的条件允许执行,直到它们评估为false。在你的例子中,for循环的条件子句总是计算为true,循环将一直持续下去。

考虑:

for (var i = n; i > 1; i--){ 
+0

只是一个观察,为什么在[tag:javascript]标记下的人喜欢制作社区维基答案? –

+0

@JesseGood对具有明显答案的简单问题做CW有两个好处。一,它允许很多用户(知道答案)提供快速输入,这就为问题创造了一个快速高质量的答案(请看尼罗河如何改进我的答案)。其次 - 它阻止了很多直接的“我也知道!”来自希望代表保持一切清洁的用户的答案。 –

+0

感谢您的意见(尽管我应该已经在meta上提过)。 –

2

你的循环将继续运行,直到n > 1变成假的,但n永远不会改变。