3

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

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

4

3 回答 3

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。

于 2012-08-25T22:17:12.613 回答
3

在这种情况发生之前,您将耗尽内存(或其他一些资源)。Javascript 数字是 64 位浮点数,它可以准确地表示高达 2^52 的整数,这意味着即使保存这么多 ID 也需要 32 PB 的内存,更不用说伴随的对象或任务了。

于 2012-08-25T22:15:09.583 回答
1

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

Opera 12 的脚本运行速度越来越慢。

Firefox 抱怨脚本花费了很多时间。

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

于 2012-08-25T22:54:40.507 回答