Javascript 如何使无限for循环(for(;))不崩溃?
我是JS新手,所以我的大部分代码都不起作用。我做了一个程序来找出每一个素数,但每次我用它,它就崩溃了。有没有办法让这段代码在运行时不崩溃Javascript 如何使无限for循环(for(;))不崩溃?,javascript,loops,for-loop,Javascript,Loops,For Loop,我是JS新手,所以我的大部分代码都不起作用。我做了一个程序来找出每一个素数,但每次我用它,它就崩溃了。有没有办法让这段代码在运行时不崩溃 var i = 0; for (;;) { if (i % 2 === 0 || i % 3 === 0 || i % 5 === 0 || i % 7 === 0) { i++; } else { return i; i++; } } 正确的方法是使用单个计时器。使用set
var i = 0;
for (;;) {
if (i % 2 === 0 || i % 3 === 0 || i % 5 === 0 || i % 7 === 0) {
i++;
}
else {
return i;
i++;
}
}
正确的方法是使用单个计时器。使用setInterval,您可以实现如下所示:
window.onload = function start() {
primes();
}
function primes() {
var i = 0;
window.setInterval(function () {
if (i % 2 === 0 || i % 3 === 0 || i % 5 === 0 || i % 7 === 0) {
i++;
} else {
console.log(i);
i++;
}
}, 1000); // repeat forever, new value every 1 second
}
一旦找到匹配项,这会将值打印到控制台(它每秒进行一次检查)。但您可以在setInterval函数的第二个参数上进行调整
如果希望在实际页面上显示结果,可以将console.log()替换为document.createTextNode()
而且,我还没有检查这个,也不知道算法是否正确。刚刚根据您的代码改编。修复程序列表:
- 手动更新
并使用空白for循环,而不是正常使用for循环,但中间条件始终返回true(此处也可以使用i
而
循环,但仍需要手动更新
),因为您不打算停止。然而,你实际上可以把整个事情放在一个计时器里,而不是像@Leonel-Atencio那样循环i
- 在函数外部使用
,如果将此代码放在函数内部,每次只返回第一个素数,因此它总是返回return
1
- 公式不正确,只检查了一些素数的例子;正如@Alexandru Ionut Mihai所说的,121将被视为主要的,即使它是11x11
var primes=[];
var i=1//2点开始;由于“i”在函数的开始处递增,因此它不会在1处开始,这会导致问题(数组中只有1,因为所有其他整数都可以被1整除)
设置间隔(primeFunc,100);
函数primeFunc(){
i++;//增加当前数量
isPrime=true;//假定为素数
对于(var j=0;j这不是质数的正确算法。121
例如,在您的代码中,被视为函数外部的质数return
?i++
afterreturn
语句没有意义这在许多方面都是错误的。除了算法本身,这不是您使用return的方式
keywordreturn
应该在函数范围内!我假设您正在全局范围内运行代码,这会引发错误!