调用setTimeout
函数将返回一个整数ID,以便可以用该ID调用clearTimeout
。如果使用所有setTimeout ID会发生什么?
如果setTimeout
被调用的次数多于JavaScript中的正整数,会发生什么情况?是否存在安全问题?
调用setTimeout
函数将返回一个整数ID,以便可以用该ID调用clearTimeout
。如果使用所有setTimeout ID会发生什么?
如果setTimeout
被调用的次数多于JavaScript中的正整数,会发生什么情况?是否存在安全问题?
找到相关的代码在Chrome:
static int timeoutId()
{
static int lastUsedTimeoutId = 0;
++lastUsedTimeoutId;
// Avoid wraparound going negative on us.
if (lastUsedTimeoutId <= 0)
lastUsedTimeoutId = 1;
return lastUsedTimeoutId;
}
因此,最后ID就没有正整数剩余仅有1之后。
在这种情况发生之前,你会耗尽内存(或其他资源)。 Javascript数字是64位浮点数,它可以准确地表示整数最大为2^52,这意味着它需要32PB的内存来保存许多ID,更不用说附带的对象或任务了。
在我使用Chrome 21的32位Windows 7系统中,页面的标签在4295063之后崩溃。但它只是标签。我关闭了该选项卡,其他一切正常工作。
Opera 12脚本运行速度越来越慢。
Firefox抱怨脚本花费了很多时间。
您可以自己测试:http://jsfiddle.net/some/r58s8/
浏览器将停止。你为什么问smt。喜欢永远不会发生的事情? – totten
黑洞会形成,人性将变成虚无。不过,一只手会继续拍手。最奇怪的事情。 –
你有什么风险发生这种情况? – Quentin