Kesalahan “Uncaught RangeError. Ukuran tumpukan panggilan maksimum terlampaui” adalah umum di antara pemrogram yang bekerja dengan JavaScript. Itu terjadi ketika panggilan fungsi melebihi batas tumpukan panggilan
Mari kita lihat kesalahan secara detail dan solusinya juga.
Apa yang Anda maksud dengan Kesalahan Stack Panggilan Maksimum?
Kesalahan ini disebabkan terutama karena alasan berikut -
Fungsi Rekursif Non-Terminasi
Browser Anda akan mengalokasikan sejumlah memori untuk semua tipe data dari kode yang Anda jalankan. Namun alokasi memori ini ada batasnya. Saat Anda memanggil fungsi rekursif, lagi dan lagi, batas ini terlampaui dan kesalahan ditampilkan
Jadi, panggil fungsi rekursif dengan hati-hati agar berhenti setelah kondisi tertentu terpenuhi. Ini akan mencegah tumpukan panggilan maksimum meluap dan kesalahan tidak akan muncul
Rentang Bermasalah
Beberapa program JS memiliki rentang masukan yang dapat diberikan oleh pengguna. Program lain memiliki fungsi yang mungkin berada di luar jangkauan. Saat ini terjadi, browser seperti Google Chrome akan memberi Anda pesan Uncaught RangeError. Tetapi Internet Explorer akan macet
Untuk mencegah hal ini, selalu periksa validitas rentang input dan bagaimana fungsi bekerja dengan rentang tersebut
Mari kita lihat sebuah contoh
Contoh
Penjelasan
Dalam contoh di atas, kami secara rekursif memanggil fun_first() karena kesalahannya adalah Uncaught RangeError ditemui. Fungsi rekursif dipanggil, yang kemudian memanggil fungsi lain, dan berlanjut hingga melebihi batas tumpukan panggilan.
Larutan
Kita harus memanggil fungsi rekursif dengan kondisi If. Ketika kode memenuhi kondisi, eksekusi fungsi dihentikan
Contoh Kode
Dalam contoh di atas, kami telah membuat kondisi if untuk memeriksa nilai i. Jika nilai i mencapai 10, fungsi yang sama tidak akan dipanggil lagi
Kesimpulan
Uncaught RangeError disebabkan ketika ukuran tumpukan hardcode browser terlampaui dan memori habis. Jadi, pastikan selalu bahwa fungsi rekursif memiliki kondisi dasar yang dapat menghentikan eksekusinya.
Kesalahan "RentangKesalahan yang Tidak Tertangkap. Ukuran tumpukan panggilan maksimum terlampaui" kesalahan terjadi di JavaScript saat Anda tidak menentukan kondisi keluar untuk fungsi rekursif Anda. Ambil yang berikut ini sebagai contoh
const test = () => test() // ❌ This will throw "Uncaught RangeError: Maximum call stack size exceeded" test()
Disalin ke papan klip. Salin
Fungsi ini akan memanggil dirinya sendiri tanpa batas waktu, menyebabkan kesalahan "Ukuran tumpukan panggilan maksimum terlampaui". Anda mungkin juga menemukan kesalahan ini dalam bentuk lain, seperti di bawah ini, tetapi penyebabnya akan sama
"Uncaught InternalError: Too much recursion"Untuk memperbaiki kesalahan, kami perlu memberikan kondisi keluar. Anda dapat melakukan ini dengan membungkus panggilan di dalam pernyataan bersyarat. Ambil kode berikut sebagai contoh
const countDown = num => { if (num > 0) { console.log(num) countDown(num - 1) } }_
Disalin ke papan klip. Salin
Ini juga merupakan fungsi rekursif yang memanggil dirinya sendiri dan akan mengeluarkan angka hingga mencapai 0. Perhatikan bahwa kita memanggil fungsi dengan "argumen yang sama - 1". Artinya pada pemanggilan tertentu, kondisi tersebut tidak akan terpenuhi, artinya kita akan menghentikan eksekusi fungsi tersebut. Dengan cara ini, kami tidak akan mencapai ukuran tumpukan panggilan maksimum, karena kami memiliki kondisi keluar
Ingin meningkatkan keterampilan Anda?
Loop tak terbatas
Kesalahan "Ukuran tumpukan panggilan maksimum terlampaui" tidak hanya dapat terjadi dengan fungsi rekursif, tetapi juga dengan loop tak terbatas. Paling umum, ini bisa terjadi saat menggunakan while loop
Cara umum untuk memastikan while loop Anda memiliki kondisi keluar adalah dengan mengurangi nilai pada setiap iterasi. Lihatlah contoh berikut
i = 100 while (i--) { console.log(i) }
Disalin ke papan klip. Salin
Setelah i mencapai 0, itu akan dievaluasi sebagai false, artinya kita akan berhenti mengeksekusi while loop. Dalam hal ini, ini adalah kondisi keluar kita