我很好奇setTimeout返回什麼。所以我做了一個快速測試:setTimeout返回什麼?
var thing = setTimeout(function(){},1);
而令我驚訝的是,它給了我一個數字。 1351
每次都不一樣。
那麼它真的只是它返回的是一個數字嗎?所以我實際上也可以做到這一點?
clearTimeout(1351);
非常混亂......
我很好奇setTimeout返回什麼。所以我做了一個快速測試: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: [] } }
哇,這是有趣的。 – 2013-10-16 01:13:37
這是一個任務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...
對於我自己,我認真地認爲我的答案比其他所有人都好,因爲它很有趣,也很有教育意義:) – 2017-11-16 01:48:15
它的計時器ID手柄:http://www.w3.org/TR/Window/#timers – 2012-04-09 04:52:56