Я читал ответ на 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