Я не слишком знаком со спецификой каждой реализации javascript в каждом браузере. Однако я знаю, что при использовании setTimeout переданный метод вызывается в отдельном потоке. Так будет ли использование метода setTimeout рекурсивно внутри метода вызывать бесконечный рост его стека до тех пор, пока он не вызовет переполнение стека? Или он создаст отдельный стек вызовов и уничтожит текущий кадр, если он не в фокусе? Вот код, который мне интересен.
function pollServer()
{
$.getJSON("poll.php", {}, function(data){
window.setTimeout(pollServer, 1000);
});
}
window.setTimeout(pollServer, 0);
Я хочу опрашивать сервер каждую секунду или около того, но не хочу тратить циклы ЦП на «цикл блокировки» - также я не хочу устанавливать ограничение по времени, в течение которого пользователь может получить доступ к странице либо до того, как браузер умирает.
EDIT
Используя firebug, я установил несколько точек останова и, просмотрев панель «Script -> Stack», увидел, что стек вызовов буквально просто «pollServer», и он не увеличивается при каждом вызове. Это хорошо - однако, другие реализации JS действуют по-другому?