【问题标题】:How would you terminate an infinite loop (`setInterval`) in the console?您将如何终止控制台中的无限循环(`setInterval`)?
【发布时间】:2018-05-15 20:13:47
【问题描述】:

例如,我们可以运行

setInterval(function(){console.log("Hello, SO!")}, 2000);

Hello, SO! 在终端中每两秒重复一次。 下图中有6个重复。

您是否可以按下组合键或键入命令来停止控制台中的无限循环?

【问题讨论】:

  • 如果您没有参考区间,最好的办法是点击F5 刷新页面,或清除所有可能的区间(因为浏览器为它们提供了数字 ID): for (var i = 1; i < 99999; i++) clearInterval(i)stackoverflow.com/a/6843415/1913729或者只需使用您在控制台中看到的 ID:clearInterval(4491)
  • @blex 句柄在哪里记录?我检查了 mdn,看起来间隔是 int32,但我在句柄本身上找不到文档。
  • 在 HTML 标准规范中,他们仅将其称为 user-agent-defined integer that is greater than zero。在规范实现中,他们使用long
  • @blex 谢谢你。所以它可能是一个非常大的数字,但可能不会,因为它们是递增的。

标签: javascript firefox console


【解决方案1】:

据我所知,这是您最好的选择。

var interval = setInterval(() => console.log("hello, world"), 2000);
clearInterval(interval);

【讨论】:

    【解决方案2】:

    要终止间隔,您需要将它们的句柄传递给clearInterval()。在您的图像中,执行setInterval() 后,您可以看到句柄以4491 返回到控制台。这样,你就可以像这样杀死它:

    clearInterval(4491);
    

    或者(更好),您应该将该句柄返回分配给一个变量,以便您可以通过编程方式终止它:

    let interval = setInterval(() => console.log('Hello, SO!'), 2000);
    clearInterval(interval);
    

    编辑:
    你也可以蛮力。句柄是一个int64 数字,因此它可能很大,但对于几乎任何应用程序来说,它都会很小,因为句柄是递增的。请注意,此方法可能会破坏其他依赖间隔的包。

    for (var i = 1; i < 9999; i++) clearInterval(i);
    

    【讨论】:

      【解决方案3】:

      您可以使用here 中描述的暂停按钮来停止当前页面上的脚本执行。不过,这将暂停页面上的所有 JS,而不仅仅是您的间隔。

      【讨论】:

        猜你喜欢
        • 2021-06-30
        • 1970-01-01
        • 2011-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-22
        • 1970-01-01
        相关资源
        最近更新 更多