true作为JavaScript while loop中的一个条件



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

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

并且其他代码有效(没有 true 作为条件)

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

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

如果你想做我认为你想做的事情,试着考虑使用window.setInterval

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

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

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

Joe 每秒可以执行 1000 个命令。你是一个快速的演讲者,所以你可以每秒给乔一百万个命令。如果您给 Joe 7000(需要 7 毫秒)命令并停止,Joe 将需要 7 秒来执行它们并停止。

现在想象一下,当你给乔无限数量的命令时会发生什么(就像在while(true)......乔永远无法追上你,因为你一直在给他命令,他无法处理所有命令,他的大脑会开始打击他,他不会那么敏感,如果有反应的话。

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

考虑到处理器的工作原理,这个类比在技术上并不是最准确的,但它应该能说明问题。

最新更新