简单说下try...catch...finally 的执行顺序

在开发的过程中,我们通常会使用try、catch、finally来处理异常情况。

前几天同事在面试完后说他问了一个简单的问题:简单说一下try、catch、finally的执行顺序,能完全回答上来的人并不多。

我们都知道加trycatch,当try中出现异常时catch中会捕获到该异常,finally无论是否有异常抛出或捕获它总是执行,往往却忽略了一些细微的点

try...catch...finally 的执行顺序

1. try中抛出异常,则跳转到catch,如果catch中出现异常则跳转到finally;

2. try或着catch正常执行,如果存在return,则先执行return,再执行finally;

3. 如果finally中出现异常或着包含return,则执行结束;如果没有异常且没有return,则会执行try或catch中的return或结束;

代码说明:

1. 当try...catch...finally中没有return时,try出现异常进入catch,执行完catch后进入finally,如果catch中出现异常也会执行finally,finally执行结束后抛出异常;如果try中无异常,执行完try后执行finally;

try {
   throw new Error("KFC Crazy Thursday need 50¥");
}
catch (ex) {
   console.log("error:", ex.message);
}
finally {
   console.log("finally");
}

  

2. try或catch中有return,先执行return,并保存返回值信息,finally依然执行,finally执行结束后,输出返回值;

function myFun(x) {
    try { 
        if(x == "")  throw "为空";
        if(isNaN(x)) throw "不是一个数字";
        if(x > 10)   throw "太大";
        if(x < 5)    throw "太小";
        console.log('x = ', x)
        return 1
    }
    catch(err) {
        console.log('输入的值:', err)
	    return 2
    }
    finally {
        console.log('finally')
    }
}

myFun('')
myFun(6)

   

 3. 当finally中存在return,会覆盖try或catch中返回的数据,如果catch中抛出异常会将该异常覆盖掉;

function myFun(x) {
    try { 
        if(x == "")  throw "为空";
        if(isNaN(x)) throw "不是一个数字";
        if(x > 10)   throw "太大";
        if(x < 5)    throw "太小";
        console.log('x =', x)
        return 1
    }
    catch(err) {
        console.log('输入的值: ', err)
	    return 2
    }
    finally {
        console.log('finally')
        return 3
    }
}
myFun(4)
myFun(8)

   

如果try或着catch需要返回值,就不能在finally中加return,加return的话程序提前退出,返回值就不是try或catch中的值;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值