setTimeout appears to execute too fast

Nick Litwin picture Nick Litwin · Jun 21, 2014 · Viewed 7k times · Source

I've been fiddling around with setTimeout and setInterval, and I cannot get the code to execute the way I would like it to. My goal is to create a setInterval, which calls once every three seconds, and have it clear after ten seconds. However, when I run the code in firebug, the only thing I get is a number, which I assume is the id of setInterval because every time I execute the code, the number increases.

var intID = setInterval(function() {
    console.log("I've been called");},3000);


setTimeout(clearInterval(intID), 10000);

Answer

Pointy picture Pointy · Jun 21, 2014

This statement:

setTimeout(clearInterval(intID), 10000);

means, "call the function 'clearInterval' passing the value of variable 'intID', and then pass the return value of that and the number 10000 to the function 'setTimeout'."

In other words, you're calling the function "clearInterval" and then passing the returned value to setTimeout().

Instead, pass setTimeout() a function:

setTimeout(function() { clearInterval(intID); }, 10000);