Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
How is the value returned from
setInterval
and
setTimeout
(the ones used to clear the timers) calculated?
Is it possible for both the functions to return the same value during runtime?
For example:
var a = setInterval(fn1, 1000);
var b = setTimeout(fn2, 1000);
Is it possible for
a
and
b
to have the same value?
The first one is more of a for-my-knowledge question, but the second one is more important.
Returns a value which can be used to cancel the timer.
So, it would seem unlikely that they return the same value (unless they are reusing values and one of the timers has already been cancelled)
Mozilla states it's DOM level 0, but not part of the specification.
(look at the bottom of the page)
I've got an even better reference:
Nabble
says:
SetTimeout and setInterval are from
the original Javascript specification,
pre-ECMA. That specification is not
officially standardized anywhere, but
it is supported by all web browsers
and most implementations of the
Javascript language. (Including
ActionScript.)
The pre-ECMA specs are often known as
the "DOM-0" APIs. Since they have
never been standardized before, it
makes sense for HTML5 to finally spec
the non-deprecated APIs in an attempt
to provide a consistent environment
across browsers. Especially when
recent events have proven that there
are companies who like to implement
the letter of the standard, but not
the spirit.
Read the original spec
here
, or from
Sun
(who was an early endorser of JavaScript).
–
Tested this under Opera 9, Safari 3, Firefox 3 and IE 7.
All returned integer values, starting at 1 and then incrementing by 1 for each call to
setTimeOut()
and
setInterval()
. However, I noticed that the browsers started the counters and handled them differently:
IE started with a (seemingly) random 6-digit number, but subsequent calls to either function incremented this number. After closing and reopening IE I found that the starting number appeared to be randomly generated, as it was nowhere near the count from the previous session.
Opera maintained a counter for each tab - closing a tab and opening a new one started the counter from 1 in the new tab.
In Safari, the count was global - opening a new tab and calling the functions in different tabs seemed to increment a global reference counter.
In Firefox, the counter appeared to start at 2, and incremented on each subsequent call to either function. Like Opera, each tab had its own counter value, but they appeared to all start at 2.
Notice though, that in all the scenarios, no two identifiers (at least in the same tab) are the same.
–
–
–
–
–
It sounds to me that the returned value is the index value for whatever internally maintained list of timers/intervals they are keeping.
As in point, I called clearInterval(18) instead of clearInterval(var_returned_from_set) and it stopped the desired timer/interval. (Tested FF17.0.1 and IE9.0.8)
Also in my own testing they appear to be unique for the lifetime of the page for both of those browsers.
Thanks for contributing an answer to Stack Overflow!
-
Please be sure to
answer the question
. Provide details and share your research!
But
avoid
…
-
Asking for help, clarification, or responding to other answers.
-
Making statements based on opinion; back them up with references or personal experience.
To learn more, see our
tips on writing great answers
.