setTimeout返回什么?

Der*_*會功夫 42 javascript

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

var thing = setTimeout(function(){},1);
Run Code Online (Sandbox Code Playgroud)

让我感到惊讶的是,它给了我一个数字.1351每次都不一样.

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

clearTimeout(1351);
Run Code Online (Sandbox Code Playgroud)

很混乱...

rid*_*rid 47

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


And*_*510 12

它可以是一个Object,我测试它node.js:

var sto = setTimeout(
    function(){console.log('ping');}, 
    1000
);

console.log(sto);
Run Code Online (Sandbox Code Playgroud)

输出是:

{ _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: [] } }
Run Code Online (Sandbox Code Playgroud)


lou*_*luo 10

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