从前有匹马叫代码
心若没有栖息的地方,到哪里都是流浪

   在日常开发中,我们经常使用try catch 来捕捉错误,来提升应用程序的健壮性,但是,大部分时候,只是惯性使用,很少静下来去深入理解一下try catch finally,所以本文将对try catch finally 深入的进行讨论,本文主要内容如下:

  1. try catch finally 的关系
  2. 异常与返回值

try catch finally 的关系

finally 中的代码总是会在 try 之后执行,如果有 catch 的话则在 catch 之后执行。也可以将 finally 中的代码看作一个回调函数,即无论出现什么情况最后一定会被调用。

这是《你不知道的JavaScript 中卷》中的话,也就是说finally总是在最后执行,catch可有可无,但是try后面至少要跟一个(catch,finally,both)处理块

function test() {
    try {
        //...
    }
    catch(e) {} //可以加也可以不加
    finally{
      // 总是会执行的
    }
}

异常与返回值

看如下这段代码:


function foo() {
    try {
        return 42;
    }finally {
        console.log('foo finally')
    }
}




console.log(foo())

这里 return 42先执行,然后try执行完毕,接着执行finally,最后foo()函数执行完毕,console.log(...)显示返回值。

就算是try中抛出了异常,也还是如此

但是,如果 finally中抛出了异常,则try中返回值会被丢弃。
通常来说,如果在函数中省略return的结果和return,则默认会返回undefined。但是在finally中会返回前面的return设定的返回值。
这里的“前面的”指的是,try或者catch的return。

function foo() {
    try {
        return a
    }catch (e) {
        return "错误!!!"
    }
    finally {
        
    }
}




console.log(foo())

posted on 2022-04-27 16:03  从前有匹马叫代码  阅读(265)  评论(0编辑  收藏  举报