Ukuran tumpukan panggilan maksimum penyetel kelas javascript terlampaui

Jika Anda melihat kesalahan "Maximum Call Stack Size Exceeded", kemungkinan ada masalah dengan fungsi rekursif dalam kode JavaScript Anda. Lebih khusus lagi, masalahnya terletak pada fungsi yang memanggil dirinya sendiri tanpa batas.  

Ketika ini terjadi, ada beberapa langkah yang dapat Anda ambil untuk memperbaiki potongan kode yang menghabiskan semua tumpukan panggilan yang tersedia di dalam browser. Dalam artikel ini, kita akan membahas lebih detail apa yang menyebabkan kesalahan "Maximum Call Stack Size Exceeded" dan cara memperbaikinya

 

Rundown Teknis

Dalam hierarki Javascript, di sinilah letak "Ukuran Tumpukan Panggilan Maksimum Terlampaui".

Seperti yang mungkin Anda ketahui, semua objek error JavaScript adalah keturunan dari objek Error atau objek yang diwariskan

Kesalahan ini adalah RangeError. RangeError biasanya berarti kesalahan telah terjadi di luar nilai argumen kode untuk parameternya.  

Sekarang Anda tahu sedikit tentang di mana kesalahan ini termasuk dalam lingkup kesalahan JavaScript, mari lanjutkan ke apa yang menyebabkan kesalahan "Ukuran Tumpukan Panggilan Maksimum Terlampaui"

Apa Kesalahan Terlampaui Stack Panggilan Maksimum?

Sebelum Anda dapat memahami kesalahan "Maximum Call Stack Size Exceeded", Anda perlu memahami rekursi

Tujuan dari Fungsi Rekursif

Biasanya, rekursi adalah pola di mana suatu fungsi yang didefinisikan memanggil dirinya sendiri, setiap panggilan membawa kondisi lebih dekat untuk mencapai kasus dasar yang menyediakan jalan keluar dari panggilan fungsi. Namun, jika Anda tidak hati-hati, suatu fungsi dapat berakhir dengan memanggil dirinya sendiri tanpa batas hingga Anda kehabisan tumpukan yang dialokasikan oleh browser.  

Lebih sering daripada tidak, alasan fungsi rekursif melempar kesalahan "Maximum Call Stack Size Exceeded" ada hubungannya dengan kasus dasar atau kekurangannya. Ketika kode rekursif kehilangan kode dasarnya atau melewati kode dasar, itu akan berulang kali terus memanggil dirinya sendiri sampai Anda menekan "Tumpukan Panggilan Maksimum" dari browser.  

Berikut adalah contoh tampilan kode rekursif saat memanggil dirinya sendiri tanpa batas

Ukuran tumpukan panggilan maksimum penyetel kelas javascript terlampaui

Outputnya kemudian akan

Ukuran tumpukan panggilan maksimum penyetel kelas javascript terlampaui

Ini akan menghasilkan kesalahan "Maximum Call Stack Size Exceeded".

Ukuran tumpukan panggilan maksimum penyetel kelas javascript terlampaui

Bagaimana Anda Memperbaiki Fungsi Rekursif?

Masalah dengan fungsi rekursif yang terus memanggil dirinya sendiri adalah tidak mungkin untuk berpindah ke fungsi berikutnya dalam sebuah rantai, dan Anda akan menghabiskan seluruh tumpukan Anda.

Cara terbaik untuk mencegah kesalahan ini adalah dengan memeriksa ulang fungsi rekursif Anda

Seperti Apa Fungsi Rekursif Seharusnya

Pastikan kasus dasar dilakukan dengan benar saat menggunakan fungsi rekursif. Anda ingin kode Anda memiliki bookend definitif untuk mencegahnya memanggil dirinya sendiri selamanya.  

Mengambil contoh yang sama dari atas, berikut adalah tampilan kode jika dilakukan dengan benar

Ukuran tumpukan panggilan maksimum penyetel kelas javascript terlampaui

"Pengembalian" adalah kunci dalam kasus ini. Tanpa "return", fungsi ini akan berlanjut tanpa henti, menghasilkan kesalahan "Maximum Call Stack Size Exceeded".  

Selain itu, Anda perlu memastikan untuk menyertakan kasus dasar dalam kode rekursif. Kasing dasar memberi tahu fungsi di mana harus diakhiri. Dalam hal ini, akhirnya adalah ketika fungsi sama dengan "0", yang akan menghasilkan "Rem udara Yay. "keluaran.  

Saat fungsi rekursif memiliki semua bagian yang diperlukan untuk berjalan dengan benar, kode Anda akan berakhir saat mencapai kasus dasar.  

Ukuran tumpukan panggilan maksimum penyetel kelas javascript terlampaui

Memperbaiki fungsi panggilan rekursif yang menghasilkan kesalahan "Ukuran Tumpukan Panggilan Maksimum Melebihi", dan menemukannya adalah dua hal yang sangat berbeda

Jadi, bagaimana Anda menemukan fungsi rekursif yang menyebabkan kesalahan ini?

Bagaimana Saya Menemukan Kesalahan?

Cara pertama untuk menemukan kesalahan adalah melalui log Anda, tetapi ketika Anda berurusan dengan ratusan, jika tidak ribuan, baris kode, akan sulit untuk menemukan satu baris kode yang rusak. Itu sebabnya kami sangat menyarankan menggunakan alat pemantauan kesalahan seperti Airbrake. Dengan Pemantauan Kesalahan Rem Udara, Anda dapat melewati log dan langsung ke baris kode yang rusak yang menghasilkan kesalahan "Maximum Call Stack Size Exceeded".  

Tidak punya rem udara?

Bacaan lebih lanjut

Atasi error laten sebelum memiliki kesempatan untuk memengaruhi pengguna Anda menggunakan tips ini

Kembangkan kerangka kerja untuk mengeluarkan kode baru menggunakan Error Budgets

Visibilitas yang buruk ke dalam produksi sangat menjengkelkan. Itulah mengapa kami menyarankan untuk mengikuti praktik terbaik yang dapat diamati ini

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 sebesar 65536), because the limit (indeed even the nature of any excessively-large-stack behavior) is unspecified.

Apa yang menyebabkan ukuran tumpukan panggilan maksimum terlampaui?

Pengecualian JavaScript "terlalu banyak rekursi" atau "Ukuran tumpukan panggilan maksimum terlampaui" terjadi ketika ada terlalu banyak panggilan fungsi, atau fungsi tidak memiliki kasus dasar.