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>

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值