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

我正在使用Direct Web Remoting(DWR)JavaScript库文件,并且仅在Safari(台式机和iPad)中出现错误,

它说

最大调用堆栈大小超出。

这个错误究竟意味着什么,它会完全停止处理吗?

此外, Safari浏览器的任何修补程序(实际上在iPad Safari ,它说

JS:执行超时超时

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


这意味着在你的代码中的某个地方,你正在调用一个函数,然后调用另一个函数等,直到你达到调用栈的限制。

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

查看堆栈

考虑这个代码...

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

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

Web Inspector

正如你所看到的,调用堆栈会一直增长,直到达到一个极限:浏览器硬编码堆栈大小或内存耗尽。

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

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

如果你不小心导入/嵌入了相同的JS文件两次,你有时可以得到这个,值得在检查员的资源标签中检查:)


在我的情况下,我发送输入元素而不是它们的值:

$.post( '',{ registerName: $('#registerName') } )

代替:

$.post( '',{ registerName: $('#registerName').val() } )

这使我的Chrome标签冻结,甚至在页面无响应时甚至向我显示“等待/杀死”对话框。

链接地址: http://www.djcxy.com/p/14085.html

上一篇: Maximum call stack size exceeded error

下一篇: How do you implement a Stack and a Queue in JavaScript?