Stack overflow at line 0

W przeglądarkach Internet Explorer od wersji 8 (włącznie) w dół można napotkać problem w postaci wyskakującego dialogu/alerta z treścią Stack overflow at line 0. Większość poradników (w tym bardziej oficjalne) sugeruje wyłączenie wszystkich zbędnych wtyczek. Innym powodem może być funkcja wywoływana rekursyjnie. Istnieje jednak możliwość trzecia – dwie funkcje odpalające siebie nawzajem wystarczająco wiele razy – przykład poniżej:

var i = 0;
function a() { b(); }

function b() {
    i++;
    if (i < 30) {
        a();
    }
}

a();

Rozwiązaniem jest przerwanie łańcucha wywołań. Można to zrobić korzystając z funkcji setTimeout(fn, 0)  w następujący sposób:

var i = 0;
function a() { b(); }
function b() {
    i++;
    if (i < 30) {
        setTimeout( function() {
                                 a(); 
                    }, 0);
    }
}

a();

A jeśli to zawiedzie, to warto zajrzeć na portal stackoverflow

Możliwość komentowania jest wyłączona.