2013-06-26 33 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永遠不會改變。