且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

最大调用堆栈大小超过错误

更新时间:2022-10-15 15:46:14



这是几乎总是因为递归函数的基本情况没有得到满足。



查看堆栈



考虑这个代码...

 (function a(){
a();
})();

这是几个电话后的堆栈...





你可以看到,调用堆栈增长,直到它达到一个限制:浏览器硬编码堆栈大小或内存耗尽。



为了解决这个问题,确保递归函数具有一个可以满足的基本情况...

 (function a(x){
// The以下条件
//是基本情况
if(!x){
return;
}
a( - x);
}) (10);


I am using a Direct Web Remoting (DWR) JavaScript library file and am getting an error only in Safari (desktop and iPad)

It says

Maximum call stack size exceeded.

What exactly does this error mean and does it stop processing completely?

Also any fix for Safari browser (Actually on the iPad Safari, it says

JS:execution exceeded timeout

which I am assuming is the same call stack issue)

It means that somewhere in your code, you are calling a function which in turn calls another function and so forth, until you hit the call stack limit.

This is almost always because of a recursive function with a base case that isn't being met.

Viewing the stack

Consider this code...

(function a() {
    a();
})();

Here is the stack after a handful of calls...

As you can see, the call stack grows until it hits a limit: the browser hardcoded stack size or memory exhaustion.

In order to fix it, ensure that your recursive function has a base case which is able to be met...

(function a(x) {
    // The following condition 
    // is the base case.
    if ( ! x) {
        return;
    }
    a(--x);
})(10);