Maximum Call Stack Size Exceeded Error Hatası Nedir? Nasıl Çözülür?

Maximum Call Stack Size Exceeded Error Hatası Nedir? Nasıl Çözülür?

Uncaught RangeError: Maximum call stack size exceeded

Hatası aldıysanız birşeler ters gitmeye başlamış demektir. Bu hata genelde tarayıcının sınırlarının zorlandığını gösterir. Özellikle iç içe fonksiyon çağrıldığında alınan bir hatadır. JavaScript ile geliştirme yaparken, iç içe fonksiyon çağrıları için tarayıcılarda sınırlama vardır. Bu nedenle çok sayıda iç içe çağrı yapıldığında Uncaught RangeError: Maximum call stack size exceeded hatası olaşacaktır.

Örnek bir uygulama yaparsak

const soyle = (sayi) => {
    let mesaj = sayi % 2 === 0 ? "Merhaba" : "Hoşçakal";
    console.log(mesaj);
    sayi += 1;
    soyle(sayi);
}

soyle(1);

Yukardaki örneği çalıştırdıktan bir süre sonra hata mesajı vererek uygulama sona erecektir. Çünkü soyle fonksiyonu iç içe kendini sürekli olarak çağıracağı için maximum stack size değeri aşılacaktır. Aslında kodda bir sorun yok fakat sorun tarayıcının kapasitesinde. Bu nedenle kodumuzu tarayıcının kapasitesine göre düzenlememiz gerekecektir.

Maximum Call Stack Size Exceeded Error Hatası
Maximum Call Stack Size Exceeded Error Hatası

Yukarıdaki örneğimize geri dönecek olursak, eğer hata almadan kodun çalışmasını istersek, bir kontrol yapısı uygulayarak fonksiyonun kendini tekrardan çağırması engellenebilir.

const soyle = (sayi) => {
    let mesaj = sayi % 2 === 0 ? "Merhaba" : "Hoşçakal";
    console.log(mesaj);
    sayi += 1;
    if(sayi > 10 ) return; // sayı 10 dan büyükse geri dön.
    soyle(sayi);
}

soyle(1);

Basit bir kontrol ile soyle fonksiyonunun kendini çok fazla çağırmasını engellemiş olduk.

Maximum Call Stack Size Exceeded Error Hatası Çözümü
Maximum Call Stack Size Exceeded Error Hatası Çözümü

Bu hatayı aldığımızda yapmamız gereken stack size değerinin aşılmasına neden olan fonksiyonun çağrılma işlemini optimize ederek uygulamamızı çalıştırmaktır.

Sormak istediğiniz soru veya konu hakkında eklemek istedikleriniz varsa yorumlara ekleyebilirsiniz.

Yorum bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir