Maksimum çağrı yığını boyutu aşıldı hatası

Direct Web Remoting (DWR) JavaScript kütüphane dosyası kullanıyorum ve yalnızca Safari'de (masaüstü ve iPad) bir hata alıyorum

Diyor ki

Maksimum çağrı yığını boyutu aşıldı.

Bu hata tam olarak ne anlama geliyor ve işlemeyi tamamen durduruyor mu?

Ayrıca Safari tarayıcısı için herhangi bir düzeltme (Aslında iPad Safaride şöyle diyor

JS:yürütme zaman aşımını aştı

ki bunun aynı çağrı yığını sorunu olduğunu varsayıyorum)

Çözüm

Bu, kodunuzda bir yerde bir işlevi çağırdığınız ve bu işlevin de başka bir işlevi çağırdığı ve çağrı yığını sınırına ulaşana kadar bu şekilde devam ettiği anlamına gelir.

Bunun nedeni neredeyse her zaman karşılanmayan bir temel duruma sahip özyinelemeli bir işlevdir.

Yığını görüntüleme

Bu kodu düşünün.

(function a() {
    a();
})();

İşte birkaç çağrıdan sonraki yığın...

Gördüğünüz gibi, çağrı yığını bir sınıra ulaşana kadar büyür: tarayıcının sabit kodlanmış yığın boyutu veya bellek tükenmesi.

Bunu düzeltmek için, özyinelemeli işlevinizin karşılanabilecek bir temel duruma sahip olduğundan emin olun...

(function a(x) {
    // The following condition 
    // is the base case.
    if ( ! x) {
        return;
    }
    a(--x);
})(10);
Yorumlar (16)

Bazen aynı JavaScript dosyasını yanlışlıkla iki kez içe aktarırsanız/eklerseniz bu durumla karşılaşabilirsiniz, denetçinin kaynaklar sekmesinde kontrol etmeye değer.

Yorumlar (6)

Kodunuzun bir yerinde özyinelemeli bir döngü var (yani yığın dolana kadar kendini tekrar tekrar çağıran bir işlev).

Diğer tarayıcılar ya daha büyük yığınlara sahiptir (bu nedenle bunun yerine bir zaman aşımı alırsınız) ya da bir nedenden dolayı hatayı yutarlar (belki de kötü yerleştirilmiş bir try-catch).

Hata oluştuğunda çağrı yığınını kontrol etmek için hata ayıklayıcıyı kullanın.

Yorumlar (3)