第一个函数确定一个数是否为素数。第二个函数应该创建一个数组,其中包含最大值(包括最大值)的所有素数,但由于某种原因它给了我一个无限循环。
function isPrime(num) {
for (i = 2; i < num; i++) {
if (num % i === 0) {
return false
}
}
if (num <= 1) {
return false;
}
return true;
}
function primes(max) {
var all = [];
for (i = 2; i <= max; i++) {
if (isPrime(i)) {
all.push(i);
}
}
}
primes(17);
最佳答案
您的i变量是全局变量,因此两个函数都使用相同的i。这意味着第一个函数在第二个函数循环时更改它。
因为第一个函数在完成时会将i设置为num-1,并且num是i的值在执行之前,它会有效地将i减一。因此,i 将在第二个函数的下一次循环迭代中获得相同的值,而永远不会前进。
通过在两个函数中添加 var
关键字来解决此问题。
for(var i=2; // ...etc)
关于javascript - 为什么这个函数会产生无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41867603/