2014-07-03 36 views
0
function startAJAXcalls() 
{ 
    setTimeout(function(){ 
     getXMLData(); 
     startAJAXcalls(); 
     }, 
     10000 
    ); 
} 

startAJAXcalls(); 

我從Head First JQuery書中解除了這段代碼。它說這將保證沒有請求的積累,我同意這是真實的,但我擔心一連串的函數調用不允許退出。由於通過setTimeout()對startAJAXcalls()進行異步調用,是否每次調用startAJAXcalls()都在自己的堆棧中?這個javascript代碼會創建一個大堆棧嗎?

回答

3

沒有,因爲一旦你調用setTimeout功能將退出,然後startAJAXcalls下一個電話將與新的堆棧幀啓動,因爲setTimeout只是排隊的回調函數的事情列出來的Javascript引擎保持,直到他們應該被執行。想想看有一個靜態函數列表,每次你打電話給setTimeout它都會將你的函數添加到列表中。在稍後JavaScript引擎執行該回調時,該回調只是將另一個回調放入同一個列表中,並且Javacript引擎在時間到來時保持循環清空並從列表中調用回調。 http://ejohn.org/blog/how-javascript-timers-work/

+0

感謝您的解釋:

於JavaScript如何實現定時器這裏真的好信息d – smuggledPancakes

相關問題