Kích thước ngăn xếp cuộc gọi tối đa vượt quá trong JavaScript là bao nhiêu?

Gần đây tôi đã phải làm việc trên một Node. js xử lý một số mảng chứa hơn 100 nghìn phần tử mỗi mảng. Trong khi hợp nhất các mảng này với hàm push[] và toán tử trải rộng JavaScript, tôi gặp phải lỗi "Vượt quá kích thước ngăn xếp cuộc gọi tối đa"

Điều này đã cho tôi cơ hội để đi sâu vào vấn đề và tìm ra cách giải quyết nó. Bây giờ chúng ta hãy tìm hiểu lỗi này là gì, tại sao nó xảy ra và cách tránh nó

Tại sao xảy ra lỗi "Đã vượt quá kích thước ngăn xếp cuộc gọi tối đa"

Hãy xem xét ví dụ dưới đây

Nếu bạn chạy đoạn mã này trong bảng điều khiển trình duyệt của mình, bạn sẽ nhận được kết quả sau

Chúng tôi có thể in thông báo lỗi rõ ràng hơn hoặc xử lý lỗi bằng các khối thử bắt

đầu vào

try {
    const factorialOf = [n] => {
        return n * factorialOf[n-1]
    }
    console.log[factorialOf[5]]
} catch [e] {
    console.log["The recursive function FAILED with this error message:", e.message]
}

đầu ra

// calling a regular function before declaring it
regularFunction[]
function regularFunction[] {
  // do something
}

const arrowFunction = [] => {
  // do something
}

// calling an arrow function after declaring it
arrowFunction[]
0

Sau khi bắt ngoại lệ, chúng tôi có thể gỡ lỗi mã bằng Công cụ dành cho nhà phát triển của trình duyệt hoặc Nút. trình gỡ lỗi js

 

Phần kết luận

Điểm mấu chốt rút ra từ hướng dẫn này là các hàm được xử lý không đúng cách có thể dẫn đến việc đạt đến độ sâu đệ quy tối đa của công cụ JavaScript. Do đó, ngăn xếp cuộc gọi đưa ra lỗi phạm vi. phạm vi lỗi. Đã vượt quá kích thước ngăn xếp cuộc gọi tối đa

Giải pháp tức thời nhất là tìm kiếm các hàm đệ quy không có cơ sở hoặc gỡ lỗi mã như hướng dẫn này đề xuất. Ngoài ra, bạn có thể kiểm tra mã trong các khối thử bắt với các thông báo lỗi duy nhất

Kích thước ngăn xếp cuộc gọi tối đa trong JavaScript là bao nhiêu?

Hậu quả của việc áp dụng một hàm có quá nhiều đối số [hãy nghĩ đến hơn hàng chục nghìn đối số] sẽ khác nhau giữa các công cụ [ JavaScriptCore có giới hạn đối số được mã hóa cứng là 65536], because the limit [indeed even the nature of any excessively-large-stack behavior] is unspecified.

Kích thước ngăn xếp cuộc gọi tối đa đã vượt quá là bao nhiêu?

Nếu bạn thấy lỗi “Đã vượt quá kích thước ngăn xếp cuộc gọi tối đa”, có thể có vấn đề với hàm đệ quy trong mã JavaScript của bạn . Cụ thể hơn, vấn đề nằm ở chức năng gọi chính nó vô thời hạn.

Lỗi phạm vi chưa được phát hiện là gì?

Lỗi phạm vi chưa bắt được xảy ra khi vượt quá kích thước ngăn xếp được mã hóa cứng của trình duyệt và bộ nhớ đã cạn kiệt . Vì vậy, hãy luôn đảm bảo rằng hàm đệ quy có một điều kiện cơ bản có thể dừng việc thực thi của nó.

Chủ Đề