try-catch-finally的执行顺序

Posted 赏花赏景赏时光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了try-catch-finally的执行顺序相关的知识,希望对你有一定的参考价值。

下面说下在javascript中try-catch-finally的执行顺序

1、不管有没有出现异常,都会执行finally中的代码

2、不管try   catch中有没有return,都会执行finally中的代码

3、若try或者catch中有return,finally中没有return,则一定是执行了try、catch中的语句,接着执行finally中的语句,最后才会执行try、catch中的return

4、若try、catch没有return,finally中有return,则一定是执行了try、catch中的语句,接着执行finally中的语句,最后执行finally中的return

5、若try、catch有return,finally中有return,则一定是执行了try、catch中的语句,接着执行finally中的语句,最后执行finally中的return

即finally是一定会执行,在try、catch语句执行之后、return语句执行之前执行;若finally没有return,则用try、catch的return;若finally有return,不管try、catch是否有return,都用finally的return

 

下面看一下demo:

<!doctype html>
<body>
  <script>
    test1()
    //  输出结果
    // try
    // catch

    test2()
    // 输出结果
    // try
    // error
    // catch

    console.log(test3())
    // 输出结果
    // try
    // finally
    // try fragment

    console.log(test4())
    // 输出结果
    // try
    // finally
    // finally fragment

    console.log(test5())
    // 输出结果
    // try
    // finally
    // try fragment

    console.log(test6())
    // 输出结果
    // try
    // error
    // finally
    // catch fragment

    console.log(test7())
    // 输出结果
    // try
    // error
    // finally
    // finally fragment

    console.log(test8())
    // 输出结果
    // try
    // error
    // finally
    // finally fragment

    // 没有return
    function test1() {
      try {
        console.log('try')
      } finally {
        console.log('catch')
      }
    }

    function test2() {
      try {
        console.log('try')
        throw new Error('error')
      } catch (error) {
        console.log(error.message)
      } finally {
        console.log('finally')
      }
    }

    // 有return
    function test3() {
      try {
        console.log('try')
        return 'try fragment'
      } finally {
        console.log('finally')
      }
    }

    function test4() {
      try {
        console.log('try')
      } finally {
        console.log('finally')
        return 'finally fragment'
      }
    }

    function test5() {
      try {
        console.log('try')
        return 'try fragment'
      } finally {
        console.log('finally')
        return 'finally fragment'
      }
    }

    function test6() {
      try {
        console.log('try')
        throw new Error('error')
      } catch (error) {
        console.log(error.message)
        return 'catch fragment'
      } finally {
        console.log('finally')
      }
    }

    function test7() {
      try {
        console.log('try')
        throw new Error('error')
      } catch (error) {
        console.log(error.message)
      } finally {
        console.log('finally')
        return 'finally fragment'
      }
    }

    function test8() {
      try {
        console.log('try')
        throw new Error('error')
      } catch (error) {
        console.log(error.message)
        return 'catch fragment'
      } finally {
        console.log('finally')
        return 'finally fragment'
      }
    }
  </script>
</body>
</html>

 

以上是关于try-catch-finally的执行顺序的主要内容,如果未能解决你的问题,请参考以下文章

try-catch-finally执行顺序

try-catch-finally的执行顺序

try-catch-finally的执行顺序

请简述JAVA中 try-catch-finally 语句的执行过程 简单明了 好的话 加分(曹苇提问)

try-catch-finally 和 return 是怎么执行的?

try-catch-finally 中哪个部分可以省略?try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?