Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使无限for循环(for(;))不崩溃?_Javascript_Loops_For Loop - Fatal编程技术网

Javascript 如何使无限for循环(for(;))不崩溃?

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

我是JS新手,所以我的大部分代码都不起作用。我做了一个程序来找出每一个素数,但每次我用它,它就崩溃了。有没有办法让这段代码在运行时不崩溃

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()

而且,我还没有检查这个,也不知道算法是否正确。刚刚根据您的代码改编。

修复程序列表:

  • 手动更新
    i
    并使用空白for循环,而不是正常使用for循环,但中间条件始终返回true(此处也可以使用
    循环,但仍需要手动更新
    i
    ),因为您不打算停止。然而,你实际上可以把整个事情放在一个计时器里,而不是像@Leonel-Atencio那样循环

  • 在函数外部使用
    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++
after
return
语句没有意义这在许多方面都是错误的。除了算法本身,这不是您使用
return的方式
keyword
return
应该在函数范围内!我假设您正在全局范围内运行代码,这会引发错误!