我希望找到从1到N定义的范围之间的所有素数之和。 当我使用值3调用sumPrimes函数时,代码给出了一个无限循环。我调试了代码并发现它仅对数字3执行此操作。对于高于2的任何其他数字,它不会这样做。
JavaScript的:
function sumPrimes(num) {
var sum=0;
for (i = 2; i <= num; i++) {
if (checkPrime(i)) {
sum += i;
}
}
return sum;
}
function checkPrime(num) {
for (i = 2; i <= Math.sqrt(num); i++) {
if (num % i === 0) {
return false;
}
}
return true;
}
答案 0 :(得分:4)
因为您必须使用i
声明var
:它会使其成为函数的本地。
for (var i = 2; i <= num...
否则这两个函数使用相同的全局变量。
如果您想避免此类错误,请使用strict mode
。
JavaScript Use Strict
您只需将"use strict";
放在.js文件的顶部。
答案 1 :(得分:1)
您尚未声明Button
的范围,这意味着两个循环将继续在全局范围内重置i
的值,从而导致循环无休止地继续。
将i
添加到两个函数的顶部,问题将消失。