2012-04-09 12 views
25

Byłem ciekawy, co zwraca setTimeout. Zrobiłem więc szybki test:Co zwraca setTimeout?

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

Co mnie zaskoczyło, to że dałem mi numer. 1351 Za każdym razem jest inaczej.

Czy to naprawdę wszystko, co zwraca, to liczba? Więc mogę to również zrobić?

clearTimeout(1351); 

bardzo mylące ...

+0

Jego identyfikator uchwyt czasowy: http://www.w3.org/TR/Window/#timers –

Odpowiedz

30

Jest to uchwyt (unikalny identyfikator). Po utworzeniu limitu czasu środowisko wykonawcze JavaScript kojarzy liczbę całkowitą "uchwyt" z utworzonym limitem czasu i może zidentyfikować, że przekroczony został limit czasu przez uchwyt setTimeout(). Po uruchomieniu clearTimeout(), będzie wiedział, o którym limicie czasu mówisz, patrząc na unikalny uchwyt, który przekazujesz.

9

Możesz myśleć o tym jako o timerID, który jednoznacznie identyfikuje licznik czasu, dzięki czemu możesz zresetować przez clearTimeout(timerID)

8

może być Object testowa miała z node.js:

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

console.log(sto); 

wyjście jest:

{ _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

Wow, to jest interesujące. –

0

To jest identyfikator zadania (wolę myśleć, że jest to ID zadania, a nie Timeout_ID, który myli wszystkich).

Wyobraź sobie, że musisz uruchomić domyślną funkcję: "f_cup_of_tea", którą każda normalna osoba potrzebuje po 5 minutach na Twojej stronie. :

tea_Task_ID = window.setTimeout(f_cup_of_tea, (5*60*1000), 15, 2); 

jak: funkcji f_cup_of_tea (milk_ml, cukier) {....}

ale niestety, z dziesięć sekund późno, Psychadelic użytkownik preferuje coś innego niż na całym świecie, a wybrać bad_tequila ...

trzeba anulować Delicious „f_cup_of_tea” zaplanowane w ciągu pięciu minut ... szczęście javascript mają myśleć o tego rodzaju problemu i można użyć:

window.clearTimeout(tea_Task_ID); 

(ale działa tylko wtedy, gdy "f_cup_of_tea" jeszcze nie zostały uruchomione).

obok, można uruchomić:

tequila_Task_ID = window.setTimeout(f_bad_tequila, (5*1000), 0); // for in 5s, with zero ice... 
+0

Ja osobiście uważam, że moja odpowiedź jest znacznie lepsza niż wszystkie inne, ponieważ jest zabawna i edukacyjna :) –