try {
requestAnimationFrame(function re(){
re();
})}
catch (e){
console.log(e);
}
我在控制台中尝试了上面的代码,它没有按预期工作。在我看来,虽然
requestAnimationFrame(function re(){
re();
})}
最终会触发一个错误,引发
try
而是动画的 id。如何捕获这样的“超出最大调用堆栈大小”错误?
最佳答案
超出最大调用堆栈大小错误 可以像任何其他错误一样被捕获:
try {
function recur() { recur(); };
recur();
} catch (ex) {
console.log("caught " + ex);
}
ECMAScript 规范中没有定义在这种情况下应该做什么(超出调用堆栈大小),但实际上,所有浏览器都会抛出可捕获的异常。然而,由于缺乏规范,不同的浏览器选择抛出不同类型的异常:我见过
Error
, RangeError
和 InternalError
.您的代码中的问题与此无关。问题是您试图捕获调用
requestAnimationFrame()
时发生的异常。 .但是你的re()
函数此时不会运行,它会按照您的要求在下一帧中运行。 re()
内部,您可以将递归调用包装到 re()
并在那里捕获堆栈溢出异常:requestAnimationFrame(function re(){
try {
re();
} catch (ex) {
console.log("caught " + ex);
}
});
关于javascript - 如何捕捉 "Maximum call stack size exceeded"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35685375/