Problems with Looping through window.setInterval

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.

This entry was posted in JavaScript, Web Browsers and tagged , . Bookmark the permalink. Both comments and trackbacks are currently closed.
  • If you found this article useful, you should subscribe to my feed (or get an e-mail). I'm also on Twitter and GitHub.
  • About the Author

    Zach Leatherman is a Professional Front End Engineer. He loves building for the web, and has been contributing to the community through his blog since February 2007. Despite his propensity for software, he has a Bachelors degree in Computer Engineering and is currently on the User Experience Team at Union Pacific Railroad. The views expressed on this website do not represent the views of his employer.

    He enjoys spending time with his beautiful wife Traci and their two Great Danes, Roxie and Ella. They also have a cat, a rabbit, goldfish, and one or more tarantulas. Read more »

2 Comments

  1. Posted January 15, 2008 at 6:49 pm | Permalink

    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.

  2. Zach Leatherman
    Posted January 16, 2008 at 8:08 pm | Permalink

    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.

One Trackback

  1. [...] 12.23 Problems with Looping through window.setInterval [...]