如何在JavaScript中表示超时?

时间:2011-06-22 15:26:57

标签: javascript timing v8 internal-representation

当我调用set timeout时,它会返回一个数字,例如

> setTimeout(function(){ console.log('done'); },1000);
4431
"done"

我知道我可以使用此号码拨打clearTimeout(),但这个号码在内部代表什么?

4 个答案:

答案 0 :(得分:6)

它代表什么并不重要。它可以是内存中的地址,也可以是数组的索引,也可以是编写解释器+偏移量的程序员的国家ID#。

你不在乎。你最好不要关心。无论它如何与今天相对应,在一个特定的浏览器/ JS环境内部,明天在其他地方它可能意味着其他东西。

您需要知道的是,这个数字对应于您的计时器。如果您以后需要对计时器执行某些操作,则需要该编号,以确保安全。当计时器停止时,扔掉它,再也不会想到它。


如果您对一些稍微粗略的细节感兴趣,请参阅the spec for the list of active timeouts - 并不要求数字(句柄)在内部代表任何,只是它可以用于可靠地识别特定的计时器。

如果您对某些真正的坚韧不拔的细节感兴趣,请下载your favorite browser的来源并前往城镇...

答案 1 :(得分:1)

我认为这取决于所使用的JS引擎,因此在所使用的浏览器上。我从较旧的问题中了解到,每个浏览器都使用不同的方式枚举返回的ID。

答案 2 :(得分:0)

它是表示跟踪事件的方式的id。

答案 3 :(得分:-1)

我认为通常的方法是设置一个等于setTimeout语句的变量,例如myTO = setTimeout(...)然后用clearTimeout(myTO)清除它。