调用setTimeout
函数将返回一个整数ID,以便可以使用该ID调用clearTimeout
。
如果setTimeout
被调用的次数多于JavaScript中的正整数,会发生什么?有安全问题吗?
答案 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/