2013-02-14 26 views
0

我有以下的運算代碼,我試圖計算所有素數從1到10的因爲遞歸而崩潰的總和。
由於代碼似乎沒有通過我的var i循環,因此我在for和while循環中遇到問題,並且在初始分配(i = 3)時卡住了。
我不是在尋找正確的答案或最有效的答案,但我正在尋找某人來幫助我瞭解什麼是錯的。
下面的代碼:用於加總質數崩潰的Javascript

var array = [2]; 
var total = 0; 
var j = 0; 
function isPrime(i, j) { 
if (i%array[j] === 0) { 
     console.log("i was " + i + " and j was " + j); 
     console.log(i + " is not a prime"); 
     j = array.length; 
    } 
    else if ((j + 1) === array.length) { 
     console.log(i + " is a prime"); 
     total += i; 
     console.log("total so far is " + total); 
     array.push(i); 
     console.log(array); 
     j = array.length; 
     console.log(j); 
    } 
    else { 
     j++; 
     isPrime(i,j); 
    } 
} 

for(var i = 3; i <=10; i++) { 
    while(j < array.length) { 
     console.log("i is " + i + " and j is " +j); 
     isPrime(i, j); 
    } 
} 

console.log(total); 
console.log(array); 

回答

3
var j = 0; 
function isPrime(i, j) { … 

意味着你有兩個不同的j變量:一是功能外,和一個內部的陰影其他。從內部你永遠不會分配或讀取外部變量。因此,外部j保持0永遠和while (j < array.length)將無限循環。

+0

通過陰影你是否意味着函數中的j是最初引入的j的拷貝並賦值爲0,所以我將在函數的外部保留一個** j = 0 **,該函數仍然分配給0和a函數內部的** j = 0 **?或者是因爲我沒有指定賦值,函數中的j自動分配了0?無論哪種方式,我認爲,因爲我在函數外部分配了初始j,那麼這個j是公共的,並且可以被代碼的任何部分訪問,是不是? – Moolla 2013-02-14 09:32:27

+0

不,「陰影」意味着你不能從函數內部看到外部變量,因爲內部函數更強。沒有隱藏的初始化,內部'j'就是你作爲參數傳入的內容(也可能是外部j的值)或'undefined'。 – Bergi 2013-02-14 09:37:00