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

2022-08-29 22:34:42

我正在使用直接 Web 远程处理 (DWR) JavaScript 库文件,并且仅在 Safari(桌面和 iPad)中收到错误

它说

已超出最大调用堆栈大小。

此错误究竟是什么意思,它是否完全停止处理?

还有浏览器的任何修复(实际上在,它说SafariiPad Safari

JS:执行超时

我假设这是相同的调用堆栈问题)


答案 1

这意味着在代码中的某个地方,您正在调用一个函数,该函数又调用另一个函数,依此类推,直到您达到调用堆栈限制。

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

查看堆栈

请考虑此代码...

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

这是几次调用后的堆栈...

Web Inspector

如您所见,调用堆栈会增长,直到达到限制:浏览器硬编码堆栈大小或内存耗尽。

为了修复它,请确保您的递归函数具有能够满足的基本情况...

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

答案 2

如果您不小心导入/嵌入了相同的JavaScript文件两次,有时可能会得到这个,值得在检查器的资源选项卡中检查。