【问题标题】:true as a condition in a javascript while loop [duplicate]true 作为javascript while循环中的条件[重复]
【发布时间】:2018-10-02 08:37:05
【问题描述】:

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

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();,但它没有成功。

【问题讨论】:

  • 第一个循环中没有break

标签: javascript while-loop conditional-statements


【解决方案1】:

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

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

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

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

Joe 每秒可以执行 1000 个命令。你说话速度很快,所以你每秒可以给乔一百万条命令。如果您给 Joe 7000(将花费您 7 毫秒)命令并停止,Joe 将花费 7 秒来执行这些命令并停止。

现在想象一下,当您向 Joe 发出无限数量的命令时会发生什么(例如在 while(true) 中... Joe 永远无法赶上您,因为您不断向他发出命令而他无法处理所有命令,他的大脑会开始打他,他不会有反应,如果有反应的话。

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

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

【讨论】:

  • var animacionFlechas = function(){ $('.up') .animate({ 'bottom': '30px' }, 500) .animate({ 'bottom' : '20px' }, 500); $('.down') .animate({ 'bottom': '10px' }, 500) .animate({ 'bottom' : '30px' }, 500); } setInterval(animacionFlechas, 1000);
  • 谢谢!! mmdts !!!,这不是重复的,对于禁止问题的天才
  • 是的。检查问题的答案,禁止该问题的“真正的天才”提到:stackoverflow.com/questions/5835126/javascript-infinite-loop 它比我的回答详细得多。由于不知道哪些问题是重复的,人们不会达到 80K 的声誉。
  • 谢谢mmdts,我再看看,可能我忽略了什么
猜你喜欢
  • 2018-09-22
  • 1970-01-01
  • 2022-07-06
  • 2019-02-19
  • 2020-03-11
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多