try/catch主要用于捕获异常,try/catch语句包含了yigebtry块,和至少有一个catch块或者饿一个finally块,有如下三种tyr声明:
- try...catch
- try...finally
- try...catch...finally
try
中放入可能会产生异常的语句或函数
catch
块中包含要执行的语句,当try
中抛出异常时,catch
块会捕获这个异常信息,并执行catch
块中的代码,如果在try中没有异常抛出,catch块将会跳过。
finally
在 try
块和catch
块之后执行,无论是否有异常抛出或者是否被捕获它总是执行。当在finally
中抛出异常信息时会覆盖try
中的异常信息。
try {
tryCode - 尝试执行代码块
}
catch(err) {
catchCode - 捕获错误的代码块
}
finally {
finallyCode - 无论 try / catch 结果如何都会执行的代码块
}
try…catch是同步代码,只能捕获“同步代码”中的"运行时异常","同步代码"是无法获取如setTimeout、Promise等异步代码的异常
try {
console.log(1);
setTimeout(function(){
console.log(2);
throw new Error("This is a test error 2");
}, 0);
console.log(3);
} catch(err) {
}
console.log(4);
// 执行结果为:1、3、4、2
假如 try {} catch(err) {} 这部分代码为函数f1,setTimeOut里面定义的异步函数,要在f1执行完之后才会执行,所以f1里面的catch是抓不到错误。
try ... catch 作为同步代码的异常捕获语句,是在阶段 1 执行的。异步的错误,发生阶段 2,由此可知:已经执行完毕的 try ... catch 不可能捕获到在它执行完毕后所发生的错误。
网友评论