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.
 
     
     
     
    