捕获回调函数中的异常?

function throwError(){
  throw new Error('ERROR');
}
 
try{
  setTimeout(throwError, 0);
} catch(e){
  alert(e);//这里的异常无法捕获
}

这样可以

function throwError(){
 try{
  throw new Error('ERROR');
 }
} catch(e){
  alert(e);//这里的异常无法捕获
}
 
setTimeout(throwError, 0);

为什么第一个例子的异常不能捕获?

阅读 6.7k
2 个回答

这个是16年提出的问题,相信题主已经知道答案了,但我还是回答一下,供后面同学参考:

try...catch是被设计成捕获当前执行环境的异常,意思是只能捕获同步代码里面的异常,异步调用里面的异常无法捕获。
第一种方式:异常出现在异步调用里面,try..catch无法捕获。
第二重方式:try..catch是写在异步代码里面,相对于try里面的所有执行都是同步代码,所以能捕获。

因为是异步操作。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题