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);
为什么第一个例子的异常不能捕获?
这个是16年提出的问题,相信题主已经知道答案了,但我还是回答一下,供后面同学参考:
try...catch是被设计成捕获当前执行环境的异常,意思是只能捕获同步代码里面的异常,异步调用里面的异常无法捕获。
第一种方式:异常出现在异步调用里面,try..catch无法捕获。
第二重方式:try..catch是写在异步代码里面,相对于try里面的所有执行都是同步代码,所以能捕获。