javascript - 如何捕捉 "Maximum call stack size exceeded"错误?

标签 javascript try-catch callstack

  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 , RangeErrorInternalError .

您的代码中的问题与此无关。问题是您试图捕获调用 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/

相关文章:

javascript - 如何确保java脚本中的某些代码在所有其他代码之前执行?

c# - 使用 try/catch 作为测试的错误形式?

c# - 文件异常DRY原理C#

java - 为什么这个程序的空间复杂度是O(h)?其中 h 是 btree 的高度

c# - PostSharp 将调用堆栈显示为 "Aspect Code"并降低调用堆栈的可用性

c++ - 当我想修改指向常量整数的指针时,为什么我的编译器不显示错误?

javascript - 选择排序算法不起作用...警告...我是新手

javascript - 无法将图像文件从 React 前端发布到 Express 和 MySQL

javascript - 使用纯 JavaScript 加载外部 JSON 数据

Javascript 对象属性 - 如果不存在则创建属性