为了账号安全,请及时绑定邮箱和手机立即绑定

以下代码try catch两个代码块为什么都执行了?

以下代码try catch两个代码块为什么都执行了?

四季花海 2019-03-05 16:19:44
下面这段js执行时,是先alert打印2,然后再alert 1. 也就是说先执行了finally,然后再return的,这样的执行顺序有没有什么应用场景?<!DOCTYPE html><html><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <meta http-equiv="X-UA-Compatible" content="ie=edge">    <title>Document</title></head><body>    <script type="text/javascript">function Test() {    var a = {b: 1}    try {        return a.b;    } finally {        a={b:2}        alert('还执行'+a.b)    }}alert(Test())</script></body></html>
查看完整描述

4 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

你的代码里并没有 catch语句,而是finally语句,finally语句的定义你可以查一查,一定会执行的


查看完整回答
反对 回复 2019-03-27
?
www说

TA贡献1775条经验 获得超8个赞

为什么先执行finally再执行try里面的return呢?

这个本身就是try...catch...finally结构的执行过程。

你可以这样理解,finally是在当前函数里面的,属于当前函数的范围,如果try里面真的返回了,则执行流程就已经跳出当前函数的范围了,那么当前函数里面的代码就不可能再执行到了。所以finally需要在try中的return真正返回之前执行,然后再返回。


查看完整回答
反对 回复 2019-03-27
?
大话西游666

TA贡献1817条经验 获得超14个赞

完整的结构是


try{

... //预期执行的,一般不会安排返回操作

}catch{

... //捕获错误执行的,如果没有捕获错误就不执行

}finally{

... //无论是否捕获错误都会执行的(除非try中有返回语句),一般用作一些清理工作

}


查看完整回答
反对 回复 2019-03-27
  • 4 回答
  • 0 关注
  • 1695 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号