2

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

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

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

4

4 回答 4

6

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

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

您只需要知道这个数字与您的计时器相对应。如果您稍后需要对计时器做某事,您会需要该号码,因此请妥善保管。当计时器死了,把它扔掉,永远不要再想它。


如果您对一些细微的细节感兴趣,请参阅活动超时列表的规范- 不要求数字(句柄)在内部代表任何内容,只需它可以用于可靠地识别特定的计时器。

如果您对一些真正坚韧不拔的细节感兴趣,请下载您最喜欢的浏览器的源代码并前往城里......

于 2011-06-22T15:30:10.173 回答
1

我认为这取决于使用的 JS 引擎,因此取决于使用的浏览器。我从较早的问题中知道,每个浏览器都使用不同的方式来枚举返回的 ID。

于 2011-06-22T15:33:36.820 回答
0

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

于 2011-06-22T15:30:42.820 回答
-1

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

于 2011-06-22T15:31:00.690 回答