try...catch...finally是我们常见的编程工具,今天我们来一起说一下JavaScript中try...catch...finally。
try语句
try语句具有三种形式:
1. try...catch
2. try...finally
3. try...catch...finally
try语句至少需要配合一个catch或finally出现,也可以catch和finally都出现。
catch的异常标识符
catch可以使用catch(e)来保存被抛出的异常值,当然也可以不声明异常标识符:
try{
}catch{
}
try...catch...finally的return
在JavaScript中try,catch,finally都可以有return语句:
function testTry() {
try {
return 1;
} catch (ex) {
return 2;
} finally {
return 3
}
}
console.log(testTry()); // 3
可以看到他的执行顺序try -> (catch) -> finally,finally的返回值可以覆盖之前的返回值。
try...catch...finally的异常流
try...catch...finally的异常流会在沿着执行流发出,如果当前try存在catch会在当前catch-block中被捕获,如果不存在将异常向外层抛出
try {
try {
throw new Error("error1");
}
finally {
console.log("finally");
}
}
catch (ex) {
console.error("outer catch", ex.message);
}
// finally
// outer catch error1
当时需要注意的是当异常流传递到内部try语句的finally-block中是如果存在return语句,则会中止异常流的抛出
try {
try {
throw new Error("error1");
}
catch (ex) {
console.error("inner catch", ex.message);
throw ex;
}
finally {
console.log("finally");
return;
}
}
catch (ex) {
console.error("outer catch", ex.message);
}
// inner catch error1
// finally
可以看到异常并没有进入到外层的catch语句中。