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 Show
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-TerminasiBrowser 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 BermasalahBeberapa 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
PenjelasanDalam 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 KesimpulanUncaught 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
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 _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 terbatasKesalahan "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 Cara umum untuk memastikan while loop Anda memiliki kondisi keluar adalah dengan mengurangi nilai pada setiap iterasi. Lihatlah contoh berikut
Disalin ke papan klip. Salin Setelah Bagaimana mengatasi ukuran tumpukan panggilan maksimum terlampaui dalam JavaScript?Jika kesalahan ini ditemukan saat memanggil fungsi rekursif, harus dipastikan bahwa fungsi memiliki kasus dasar yang ditentukan untuk mengakhiri panggilan rekursif . Jika kesalahan ini terjadi karena terlalu banyak pemanggilan fungsi atau variabel, ini harus dikurangi sebanyak mungkin.
Berapa ukuran tumpukan panggilan maksimum dalam JavaScript?Konsekuensi menerapkan fungsi dengan terlalu banyak argumen (pikirkan lebih dari puluhan ribu argumen) bervariasi di seluruh mesin ( JavaScriptCore memiliki batas argumen hard-coded 65536), because the limit (indeed even the nature of any excessively-large-stack behavior) is unspecified.
Apa itu tumpukan panggilan dalam JavaScript?Tumpukan panggilan adalah mekanisme untuk juru bahasa (seperti juru bahasa JavaScript di browser web) untuk melacak tempatnya dalam skrip yang memanggil beberapa fungsi — what function is currently being run and what functions are called from within that function, etc. |