如何在JavaScript中表示超时?
例如,当我调用set timeout时,它会返回一个数字如何在JavaScript中表示超时?,javascript,timing,v8,internal-representation,Javascript,Timing,V8,Internal Representation,例如,当我调用set timeout时,它会返回一个数字 > setTimeout(function(){ console.log('done'); },1000); 4431 "done" 我知道我可以用这个号码来调用clearTimeout(),但是这个号码在内部代表什么呢?它代表什么并不重要。它可以是内存中的地址,也可以是数组的索引,或者是编写解释器+偏移量的程序员的国家ID 你不在乎。你最好不要在意。无论它今天在一个特定的浏览器/JS环境中与之对应的是什么,它很可能意味着明天在其
> setTimeout(function(){ console.log('done'); },1000);
4431
"done"
我知道我可以用这个号码来调用
clearTimeout()
,但是这个号码在内部代表什么呢?它代表什么并不重要。它可以是内存中的地址,也可以是数组的索引,或者是编写解释器+偏移量的程序员的国家ID
你不在乎。你最好不要在意。无论它今天在一个特定的浏览器/JS环境中与之对应的是什么,它很可能意味着明天在其他地方的其他东西
你只需要知道这个数字与你的计时器对应。如果你以后需要对你的计时器做些什么,你会想要那个数字,所以要保证它的安全。当计时器死机时,扔掉它,再也不要想它了
如果您对一些细微的细节感兴趣,请参阅-不要求数字(句柄)在内部表示任何内容,只要求它可以用于可靠地识别特定计时器
如果您对一些非常棘手的细节感兴趣,请下载源代码并进城…它是表示跟踪事件方式的id。我认为通常的方法是设置一个等于setTimeout语句的变量,例如myTO=setTimeout(…),然后使用cleartimout(myTO)清除它.我认为这取决于使用的JS引擎,因此取决于使用的浏览器。我从以前的问题中了解到,每个浏览器都使用不同的方式枚举返回的ID。另一种称为“不透明句柄”@Thomas这就是我们在这里的原因…:)我明白你想说什么,但这更多是为了满足我自己的好奇心,而不是解决一个编程问题。@Alnitak你可以再说一遍!:)在这里的2.5个月里,我学到了很多东西。@Greg:我添加了一个参考资料-但我怀疑你没有抓住要点。这个数字不必在内部表示它所表示的外部以外的任何东西。这并不能回答这个问题:“这个数字在内部表示什么?”另一个奇怪之处是:在某些浏览器(至少是Chrome浏览器)上,您可以用“clearTimeout()”清除间隔计时器(“setInterval()”)。