2013-02-14 27 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