Zach’s ugly mug (his face)

Zach Leatherman

Problems with Looping through window.setInterval

23 Dec 2007 Zach Leatherman 1 min read

Warning

This article is old and may contain information that is outdated, irrelevant, or—dare I say it—no longer accurate. Read with care!

Look at this code. What do you expect to be the outcome?

var d = new Date();
var r = [];
for(var j=0,k=2;j<k ;j++) {
    window.setInterval(function()
    {
        var next = new Date();
        r.push(next.getTime() - d.getTime());
    },1000);
}

Every 1000 milliseconds (1 second), the r array should have three delta timestamps added into it (one for each interval set in the for loop). In FireFox, however, there are exactly nine delta timestamps added per second. If you set k=10, the result is one hundred delta timestamps per second. If anyone has the answer, I am curious, even if the result is that I'm an idiot. It seems to work correctly in Internet Explorer 7. Thanks for your help, internet.

2 Comments

➡ Load Disqus to Leave a Comment ⬅

Um... do you mean to be using window.setTimeout rather than window.setInterval? Using setInterval will cause your internal function to execute once every 100 milliseconds. And will add lots of time stamps to the array.

Zach Leatherman

17 Jan 2008 at 01:08AM

I meant to use setInterval. Using the for loop above, I should have my internal payload function execute in 3 separate 1 second interval timers. So every second, I should get 3 entries added into the r array. But, I'm getting 9 entries added every second, which is confusing to me. There should be only 3 timers, not 9.