我不太熟悉每個瀏覽器上每個javascript實現的細節。然而,我知道使用setTimeout,傳入的方法會在單獨的線程中調用。那麼在一個方法內部遞歸地使用setTimeout會導致堆棧無限增長,直到它導致堆棧溢出?或者它會創建一個單獨的調用堆棧,並在焦點失去時摧毀當前幀?這是我想知道的代碼。Javascript投票服務器。這會導致堆棧溢出嗎?
function pollServer()
{
$.getJSON("poll.php", {}, function(data){
window.setTimeout(pollServer, 1000);
});
}
window.setTimeout(pollServer, 0);
我想輪詢服務器每秒左右,但不想浪費CPU週期以「堵循環」 - 我也不想設置多長時間,用戶可以訪問一個時限或者在他們的瀏覽器死亡之前。
編輯
用Firebug,我設置一些斷點,並通過查看「腳本 - >棧」面板中看到調用堆棧是真的只是「pollServer」,它不會每次通話成長。這很好 - 但是,JS的其他實現的行爲有什麼不同?
這看起來很穩固,與我的實現類似。如果這是保證不會導致SO,那麼看起來我的代碼也不會。 – nlaq 2009-07-20 19:04:26