我很好奇 setTimeout 会返回什么。所以我做了一个快速测试:
var thing = setTimeout(function(){},1);
令我惊讶的是,它给了我一个数字。1351
每次都不一样。
那么它返回的真的只是一个数字吗?所以我实际上也可以这样做吗?
clearTimeout(1351);
很混乱...
我很好奇 setTimeout 会返回什么。所以我做了一个快速测试:
var thing = setTimeout(function(){},1);
令我惊讶的是,它给了我一个数字。1351
每次都不一样。
那么它返回的真的只是一个数字吗?所以我实际上也可以这样做吗?
clearTimeout(1351);
很混乱...
它是一个句柄(一个唯一标识符)。当您创建超时时,JavaScript 运行时会将句柄与您创建的超时相关联,并且它可以通过句柄setTimeout()
返回来识别该超时。当你运行时clearTimeout()
,它会通过查看你传入的唯一句柄来知道你在谈论什么超时。
它可以是一个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: [] } }
你可以把它想象成一个timerID
,它唯一地标识一个定时器,这样你就可以通过clearTimeout(timerID)
它是一个任务 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) { .... }
但不幸的是,晚了十秒,迷幻药使用者更愿意得到与整个世界不同的东西,并选择了bad_tequila ...
您必须在五分钟内取消预定的美味“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...
实际上,您应该非常小心地清除超时帽子方式,因为该数字在某些情况下可能会发生变化。例如,如果您在代码中的某处添加另一个超时(意外地在此之前(1351),此 id 可能会更改为 1352。因此您清除超时将清除不同的超时。最好的方法是使用变量;
let test = "set_Timeout(() => {
alert("hi")
}, 3000);
clear_Timeout(test);