2012-04-09 76 views
25

我很好奇setTimeout返回什麼。所以我做了一個快速測試:setTimeout返回什麼?

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

而令我驚訝的是,它給了我一個數字。 1351每次都不一樣。

那麼它真的只是它返回的是一個數字嗎?所以我實際上也可以做到這一點?

clearTimeout(1351); 

非常混亂......

+0

它的計時器ID手柄:http://www.w3.org/TR/Window/#timers – 2012-04-09 04:52:56

回答

30

這是一個句柄(唯一標識符)。在創建超時時,JavaScript運行時會將整數「句柄」與您創建的超時關聯,並且可以通過句柄setTimeout()返回來識別超時。當您運行clearTimeout(),它會知道超時你通過看獨特的手柄你通過談論。

9

你可以把它看成是一個timerID,唯一標識一個定時器,這樣就可以通過重置clearTimeout(timerID)

8

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

哇,這是有趣的。 – 2013-10-16 01:13:37

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); 

,如: 功能f_cup_of_tea(milk_ml,糖){....}

,但不幸的是,有十個第二滯後,一個psychadelic用戶更願意得到的東西比整個世界的不同,選擇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... 
+0

對於我自己,我認真地認爲我的答案比其他所有人都好,因爲它很有趣,也很有教育意義:) – 2017-11-16 01:48:15