2012-08-25 50 views
3

调用setTimeout函数将返回一个整数ID,以便可以用该ID调用clearTimeout如果使用所有setTimeout ID会发生什么?

如果setTimeout被调用的次数多于JavaScript中的正整数,会发生什么情况?是否存在安全问题?

+0

浏览器将停止。你为什么问smt。喜欢永远不会发生的事情? – totten

+1

黑洞会形成,人性将变成虚无。不过,一只手会继续拍手。最奇怪的事情。 –

+1

你有什么风险发生这种情况? – Quentin

回答

4

找到相关的代码在Chrome:

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

因此,最后ID就没有正整数剩余仅有1之后。

3

在这种情况发生之前,你会耗尽内存(或其他资源)。 Javascript数字是64位浮点数,它可以准确地表示整数最大为2^52,这意味着它需要32PB的内存来保存许多ID,更不用说附带的对象或任务了。

1

在我使用Chrome 21的32位Windows 7系统中,页面的标签在4295063之后崩溃。但它只是标签。我关闭了该选项卡,其他一切正常工作。

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

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

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

相关问题