如果使用所有setTimeout ID会发生什么?

时间:2012-08-25 22:11:13

标签: javascript settimeout

调用setTimeout函数将返回一个整数ID,以便可以使用该ID调用clearTimeout

如果setTimeout被调用的次数多于JavaScript中的正整数,会发生什么?有安全问题吗?

3 个答案:

答案 0 :(得分:4)

在Chrome中找到相关代码:

static int timeoutId()
{
    static int lastUsedTimeoutId = 0;
    ++lastUsedTimeoutId;
    // Avoid wraparound going negative on us.
    if (lastUsedTimeoutId <= 0)
        lastUsedTimeoutId = 1;
    return lastUsedTimeoutId;
}

因此,在没有正整数后,Last ID将只为1。

答案 1 :(得分:3)

在此之前很久你就会耗尽内存(或其他一些资源)。 Javascript数字是64位浮点数,可以准确地表示最多2 ^ 52的整数,这意味着它甚至需要32 PB的内存来保存那么多ID,更不用说随附的对象或任务了。

答案 2 :(得分:1)

在我的带有Chrome 21的32位Windows 7系统上,带有页面的标签在大约4295063之后崩溃。但它只是标签。我关闭了该标签,其他一切正常。

Opera 12脚本运行得越来越慢。

Firefox抱怨脚本需要很长时间。

您可以自己测试:http://jsfiddle.net/some/r58s8/