我正在使用直接Web Remoting (DWR) JavaScript库文件,只在Safari(桌面和iPad)中得到一个错误
它说
超过最大调用堆栈大小。
这个错误到底是什么意思,它是否完全停止处理?
Safari浏览器也有任何修复(实际上是在iPad Safari上,它说
JS:执行超时
我认为这是相同的调用堆栈问题)
我正在使用直接Web Remoting (DWR) JavaScript库文件,只在Safari(桌面和iPad)中得到一个错误
它说
超过最大调用堆栈大小。
这个错误到底是什么意思,它是否完全停止处理?
Safari浏览器也有任何修复(实际上是在iPad Safari上,它说
JS:执行超时
我认为这是相同的调用堆栈问题)
当前回答
你可以在crome浏览器中找到你的递归函数,按ctrl+shift+j,然后source选项卡,它会给你代码编译流程,你可以在代码中使用断点。
其他回答
对于我这个TypeScript初学者来说,这是_var1的getter和setter的问题。
class Point2{
constructor(private _var1?: number, private y?: number){}
set var1(num: number){
this._var1 = num // problem was here, it was this.var1 = num
}
get var1(){
return this._var1 // this was return this.var1
}
}
我知道这个帖子很旧了,但我认为值得一提的是我发现这个问题的场景,所以它可以帮助其他人。
假设你有这样的嵌套元素:
<a href="#" id="profile-avatar-picker">
<span class="fa fa-camera fa-2x"></span>
<input id="avatar-file" name="avatar-file" type="file" style="display: none;" />
</a>
您不能在其父元素的事件内操作子元素事件,因为它会传播到自身,进行递归调用,直到抛出异常。
所以这段代码会失败:
$('#profile-avatar-picker').on('click', (e) => {
e.preventDefault();
$('#profilePictureFile').trigger("click");
});
你有两个选择来避免这种情况:
将子对象移动到父对象的外部。 将stopPropagation函数应用于子元素。
对我来说 我错误地分配了相同的变量名,并给val函数“class_routine_id”
var class_routine_id = $("#class_routine_id").val(class_routine_id);
应该是这样的:
var class_routine_id = $("#class_routine_id").val();
在我的情况下,我得到这个错误的ajax调用和数据,我试图传递的变量没有定义,这是显示我这个错误,但不是描述变量没有定义。我加上定义了变量n的值。
检测堆栈溢出的问题是,有时堆栈跟踪将被解开,您将无法看到实际发生了什么。
我发现Chrome的一些较新的调试工具在这方面很有用。
点击Performance选项卡,确保Javascript样本被启用,你会得到类似这样的结果。
溢出的地方很明显!如果单击extendObject,您将能够看到代码中确切的行号。
你也可以看到时间,可能有帮助,也可能没有帮助,或者转移注意力。
另一个有用的技巧是,如果你不能真正发现问题,在你认为问题所在的地方放置大量的console.log语句。上面的步骤可以帮助你做到这一点。
在Chrome中,如果你反复输出相同的数据,它会像这样显示问题更清楚。在这个例子中,堆栈在最终崩溃之前击中了7152帧: