2012-11-29 43 views
0

article說,下面的代碼將炸燬堆棧:的javascript堆炸燬

function fetchLatest() { 
    $.getJSON('/wait?id=' + last_seen, function(d) { 
    $.each(d, function() { 
     last_seen = parseInt(this.id, 10) + 1; 
     ul.prepend($('<li></li>').text(this.text)); 
    }); 
    fetchLatest(); 
    }); 
} 

客戶端JavaScript只是使用jQuery的的getJSON方法 對一個簡單的URL端點 執行長輪詢以遞歸方式執行此操作可能是一個糟糕的主意,因爲它最終會打擊瀏覽器的JavaScript堆棧,但它對於演示來說工作正常。

這是真的嗎?如果是的話,我們如何防止這一點?

回答

6

這是不正確的。

因爲getJSON是異步的,所以下一次fetchLatest()調用將在前一次完成後開始。

如果你寫這樣的同步代碼,它會凍結,然後拋出堆棧溢出。