我很好奇setTimeout返回了什么。所以我做了一个快速测试:
var thing = setTimeout(function(){},1);
让我感到惊讶的是,它给了我一个数字。 1351
每次都不同。
那真的是它返回的是一个数字吗?所以我也可以这样做吗?
clearTimeout(1351);
很混乱...
它是一个句柄(一个唯一的标识符)。当您创建超时时,JavaScript运行时将句柄与您创建的超时相关联,并且它可以通过句柄setTimeout()
返回来识别超时。当你运行clearTimeout()
时,它会通过查看你传入的唯一句柄知道你正在谈论什么超时。
您可以将其视为timerID
,它唯一地标识计时器,以便您可以通过clearTimeout(timerID)
重置
它可以是Object
,我用node.js
测试它:
var sto = setTimeout(
function(){console.log('ping');},
1000
);
console.log(sto);
输出是:
{ _idleTimeout: 1000,
_idlePrev:
{ '0': [Function: listOnTimeout],
_idleNext: [Circular],
_idlePrev: [Circular],
msecs: 1000 },
_idleNext:
{ '0': [Function: listOnTimeout],
_idleNext: [Circular],
_idlePrev: [Circular],
msecs: 1000 },
_idleStart: 2413359232,
_onTimeout: [Function],
_repeat: false,
domain:
{ domain: null,
_events: { error: [Function] },
_maxListeners: undefined,
members: [] } }
它是一个任务ID(我更喜欢认为它是一个task_ID而不是一个混淆每个人的Timeout_ID)。
想象一下你必须启动默认功能:“f_cup_of_tea”,任何正常的人在你的网站上5分钟后最终会需要。 :
tea_Task_ID = window.setTimeout(f_cup_of_tea, (5*60*1000), 15, 2);
喜欢:function f_cup_of_tea(milk_ml,sugar){....}
但不幸的是,迟到十秒钟,一个迷幻的用户更喜欢得到与整个世界不同的东西,并选择一个糟糕的龙舌兰酒......
您必须在五分钟内取消预定的美味“f_cup_of_tea”...幸运的是,javascript已经考虑过这种问题,您可以使用:
window.clearTimeout(tea_Task_ID);
(但只有在“f_cup_of_tea”尚未开始的情况下它才会生效)。
接下来,您可以启动:
tequila_Task_ID = window.setTimeout(f_bad_tequila, (5*1000), 0); // for in 5s, with zero ice...