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>

猜你喜欢

转载自blog.csdn.net/tangxiujiang/article/details/116562388