I was reading an answer on StackOverflow here that explained how to use setTimeout to create a sort of recurring loop on a webpage. However, I am wondering why setTimeout requires an anonymous function to work. Consider the following code:
trainingTimer(60,0);
function trainingTimer(duration,c) {
document.getElementById("timer").innerHTML = "Time left: "+(duration-c);
if(duration==c) {
alert("Time is up!");
}
else {
window.setTimeout(trainingTimer(duration,c+1),1000);
}
}
I wrote this based off the answer that I linked above, however when it runs it loops through all 60 trainingTimer
calls at once, and immediately displays "Time left: 0" on my web page. However, if I modify
window.setTimeout(trainingTimer(duration,c+1),1000);
and wrap trainingTimer(duration,c+1)
in an anonymous function like so
window.setTimeout(function() {trainingTimer(duration,c+1)},1000);
then the code works perfectly fine.
I am wondering why I have to wrap a named function inside an anonymous function in order for setInterval to work properly. Thanks for all the help.