setTimeout返回什么?

时间:2012-04-09 04:45:04

标签: javascript

我很好奇setTimeout返回的是什么。所以我做了一个快速测试:

var thing = setTimeout(function(){},1);

让我感到惊讶的是,它给了我一个号码。 1351每次都不同。

所以它返回的真的是一个数字吗?所以我也可以这样做吗?

clearTimeout(1351);

很混乱......

5 个答案:

答案 0 :(得分:43)

它是句柄(唯一标识符)。当您创建超时时,JavaScript运行时将句柄与您创建的超时相关联,并且它可以通过句柄setTimeout()返回识别超时。当您运行clearTimeout()时,它会通过查看您传入的唯一句柄知道您正在谈论的超时。

答案 1 :(得分:10)

您可以将其视为timerID,它唯一地标识计时器,以便您可以按clearTimeout(timerID)重置

答案 2 :(得分:10)

它可以是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: [] } }

答案 3 :(得分:0)

它是一个任务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...

答案 4 :(得分:0)

实际上,您应该非常小心地清除超时帽子,因为在某些情况下该数字可能会更改。例如,如果您在代码中的某个位置添加了另一个超时(偶然在此超时之前(1351),此ID可能会更改为1352。)因此,清除超时将清除另一个超时。 最好的方法是使用变量;

let test = "set_Timeout(() => {
    alert("hi")
}, 3000);

clear_Timeout(test);