作用
try...catch语句标记要尝试的语句块,并指定一个出现异常时抛出的响应。
声明
try语句包含了由一个或者多个语句组成的try块,
和至少一个catch子句或者一个finally子句的其中一个,或者两个兼有, 下面是三种形式的try声明:
- try...catch
- try...finally
- try...catch...finally
try{
console.log('begin throw error')
throw 'this is a error'
console.log('Will it work here ? ')
} catch(e){
console.log('e:',e)
}
//打印结果
begin throw error
e: this is a error
从结果可以看到
如果在try块中有任何一个语句(或者从try块中调用的函数)抛出异常,控制立即转向catch子句。
finally语句
function foo(){
try{
return 0;
} catch(err) {
//TODO
return 1;
} finally {
console.log("a")
}
}
console.log(foo());
//打印结果
a
0
可以看到先执行finally 在执行try里面的return
function foo(){
try{
throw 'this is a error'
} catch(e) {
//TODO
console.log('e:',e)
return 1;
} finally {
console.log("a")
}
}
console.log(foo());
//打印结果
e: this is a error
a
1
可以看到 先执行return之前的语句 再执行finally 最后执行return
function foo() {
try {
// throw 'this is a error'
return 0;
} catch (e) {
} finally {
console.log("a");
return "finally end";
}
}
console.log(foo());
//打印结果
a
finally end
可以看到 finally 里的return"覆盖了"了try中的return
MDN中有一句话:
如果从finally块中返回一个值,那么这个值将会成为整个try-catch-finally的返回值,无论是否有return语句在try和catch中。这包括在catch块里抛出的异常。