Четох отговор на StackOverflow тук, който обясняваше как да използвам setTimeout за създаване на нещо като повтарящ се цикъл на уеб страница. Чудя се обаче защо setTimeout изисква анонимна функция, за да работи. Разгледайте следния код:
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);
}
}
Написах това въз основа на отговора, който свързах по-горе, но когато се изпълнява, преминава през всичките 60 trainingTimer
повиквания наведнъж и веднага показва „Оставащо време: 0“ на моята уеб страница. Ако обаче модифицирам
window.setTimeout(trainingTimer(duration,c+1),1000);
и обвийте trainingTimer(duration,c+1)
в анонимна функция по този начин
window.setTimeout(function() {trainingTimer(duration,c+1)},1000);
тогава кодът работи перфектно.
Чудя се защо трябва да обвивам функция с име в анонимна функция, за да може setInterval да работи правилно. Благодаря за цялата помощ.
trainingTimer(someargs)
не връща функция и setTimeout се нуждае от функция за изпълнение. - person Kevin B   schedule 14.05.2014window.alert()
не се нуждае от аргумент. - person Kevin B   schedule 14.05.2014