定义和用法
try/catch/finally 语句用于处理代码中可能出现的错误信息。
try: 允许我们定义在执行时进行错误测试的代码块。
catch: 允许我们定义当 try 代码块发生错误时,所执行的代码块。
finally: 在 try 和 catch 之后无论有无异常都会执行。
注意: catch 和 finally 语句都是可选的,但你在使用 try 语句时必须至少使用一个。
try {
throw Error('this is a error');
} catch (error) {
console.error(error);
} finally {
console.log('finally doing something')
}
Error: this is a error
finally doing something
上面代码体会到了try/catch/finally语句的使用
我们给它外面套一个函数
function test(){
try {
throw Error('this is a error');
return 'try doing sothing'
} catch (error) {
console.error(error);
} finally {
console.log('finally doing something')
}
}
test()
Error: this is a error
finally doing something
注意到函数内有一个return,但是因为try中抛出了一个错误,但是当错误发生时, JavaScript 会停止执行,所以这个return不起作用了.
下面我们来改改上面的代码
function test(){
let i=100;
try {
i++;
console.log('try doing sothing')
return i
} catch (error) {
console.error(error);
} finally {
console.log('finally doing something')
}
}
test()
try doing sothing
finally doing something
101
我们看到上面的执行结果,先执行代码块中代码,最后才执行return
下面我们再来改造一下
function test(){
let i=100;
try {
i++;
console.log('try doing sothing')
return i
} catch (error) {
console.error(error);
} finally {
console.log('finally doing something')
}
console.log('outside doing sothing')
return i;
}
test()
try doing sothing
finally doing something
101
我们通过执行可知,在try中执行了return后最外层的代码就不执行了
这里,我们回忆一下上一篇博文的标签化语句,如果我们想执行外层的代码那要怎么处理呢
看看代码
function test(){
let i=100;
block: try {
i++;
console.log('try doing sothing')
return i
} catch (error) {
console.error(error);
} finally {
console.log('finally doing something')
break block;
}
console.log('outside doing sothing')
return i;
}
test()
try doing sothing
finally doing something
outside doing sothing
101
这里我们通过标签化语句,通过break来跳出当前代码块,所以try中return就不会再执行了,紧接着就会执行到外层代码了
完结!