>我想知道为什么这段代码会使我的浏览器崩溃:
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)。
考虑到处理器的工作原理,这个类比在技术上并不是最准确的,但它应该能说明问题。