true作为javascript while循环中的条件

时间:2018-04-22 01:40:32

标签: javascript while-loop conditional-statements

我想知道为什么这段代码会崩溃我的浏览器:

while (true) {
    $('.selector')
        .animate({ 'bottom': '30px' }, 500)
        .animate({ 'bottom' : '20px' }, 500);
}

并且这个其他代码可以工作(不作为条件的真实)

var a = 0;
while (a < 1000) {
    $('.selector')
        .animate({ 'bottom': '30px' }, 500)
        .animate({ 'bottom' : '20px' }, 500);
    a++;
}

如果我敢于自己回答这个问题,我会说第二个代码填充1000个动作的队列,并在第一个代码永远不会完成并使浏览器崩溃时停止。
我需要它是无限的,但在动画完成之前不会进入下一次迭代。我在这里和那里玩stop();,但它没有做到这一点。

1 个答案:

答案 0 :(得分:0)

如果您尝试做我认为您尝试做的事情,请尝试考虑使用window.setInterval

https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setInterval

while(true)永远运行!它永远不会停止。

要解释为什么永远运行的循环会崩溃浏览器,请考虑以下示例:

Joe每秒可以执行1000个命令。你是一个快速的发言人,所以你可以每秒给Joe一百万个命令。如果您给Joe 7000(将需要7毫秒)命令并停止,Joe将花七秒钟执行它们并停止。

现在想象一下,当你给Joe一个无限数量的命令时会发生什么(就像在while(true)中一样......乔永远无法追上你,因为你不断给他命令,他可以&#39;处理完所有事情后,他的大脑会开始打他,如果有回应,他就不会那么敏感。

您的浏览器是Joe。它运行在单个线程(一个核心)上,资源有限,开销很高,并且运行相对非常低效的处理器语言(Javascript)。

考虑到处理器的工作方式,这个类比并不是技术上最准确的,但它应该得到重点。