我想知道为什么这段代码会崩溃我的浏览器:
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();
,但它没有做到这一点。
答案 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)。
考虑到处理器的工作方式,这个类比并不是技术上最准确的,但它应该得到重点。