Function is not defined, when using setInterval or setTimeout
Javascript can be challenging and is full of traps for the beginners. Today I was caught into one of such traps and I was struggling with Uncaught ReferenceError, functionName() is not defined
error, for way to long. Solution seems easier than I was thinking, so I wrote this short memo to future myself to avoid falling into the same trap again.
The solution is as simple as changing call to anonymous function. Instead of:
setInterval('functionName()', 1000);
use:
setInterval(function(){functionName()}, 1000);
Why is this happening? Is this a bug in Javascript? Yes and no. It is a bug, but in your code, not in Javascript! :]
Refer to this great explanation. To cite:
(…) when you attempt
setInterval(funcName(), 100)
, you are actually calling the function and passing its return value tosetInterval
, which is incorrect.
The same goes for setTimeout()
. And you have to use this approach (anonymous function), if you need to call any function repeatedly with some parameters.
An easier solution is to just pass a function pointer, ie.
setInterval(functionName, 1000);
True, true! :>