当我调用 set timeout 它返回一个数字,例如
> setTimeout(function(){ console.log('done'); },1000);
4431
"done"
我知道我可以用这个号码打电话clearTimeout()
,但这个号码在内部代表什么?
当我调用 set timeout 它返回一个数字,例如
> setTimeout(function(){ console.log('done'); },1000);
4431
"done"
我知道我可以用这个号码打电话clearTimeout()
,但这个号码在内部代表什么?
它代表什么并不重要。它可以是内存中的地址,也可以是数组的索引,或者是编写解释器的程序员的国家 ID # + 偏移量。
你不在乎。你最好不要在意。无论它今天对应什么,在一个特定的浏览器/JS 环境内部,它很可能在明天的其他地方意味着其他东西。
您只需要知道这个数字与您的计时器相对应。如果您稍后需要对计时器做某事,您会需要该号码,因此请妥善保管。当计时器死了,把它扔掉,永远不要再想它。
如果您对一些细微的细节感兴趣,请参阅活动超时列表的规范- 不要求数字(句柄)在内部代表任何内容,只需它可以用于可靠地识别特定的计时器。
如果您对一些真正坚韧不拔的细节感兴趣,请下载您最喜欢的浏览器的源代码并前往城里......
我认为这取决于使用的 JS 引擎,因此取决于使用的浏览器。我从较早的问题中知道,每个浏览器都使用不同的方式来枚举返回的 ID。
它是表示跟踪事件的方式的 id。
我认为通常的方法是设置一个等于 setTimeout 语句的变量,例如 myTO = setTimeout(...) 然后用 clearTimeout(myTO) 清除它。