博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
try-catch-finally,被你忽略掉的执行顺序
阅读量:5996 次
发布时间:2019-06-20

本文共 1079 字,大约阅读时间需要 3 分钟。

try-catch是捕捉异常的神器,不管是调试还是防止软件崩溃,都离不开它。今天笔者介绍一下加上finally后的执行顺序

function test() {  try {    console.log(1);  } finally {    console.log(2);  }}console.log(test()); // 1 2

嗯!按顺序执行了。


我们在try中加入return语句

function test() {  try {    console.log(1);    return 'from_try';  } catch (e) {    // TODO  } finally {    console.log(2);  }}console.log(test()); // 1 2 from_try

等等,难道不应该是 1 > from_try > 2的顺序吗?

抱歉啊,是这样的,在try和catch的代码块中,如果碰到return语句,那么在return之前,会先执行finally中的内容,所以2会比from_try优先输出。


我们在finally中也加入return语句

function test() {  try {    console.log(1);    return 'from_try';  } catch (e) {    // TODO  } finally {    console.log(2);    return 'from_finally';  }}console.log(test()); // 1 2 from_finally

买噶的,我的from_try怎么不见了?

抱歉,按照上一条的规则,finally是会优先执行的,所以如果finally里有return语句,那么就真的return了。


现在笔者在try语句块中故意报错

function test() {  try {    console.log(1);    throw new Error('throw');  } catch (e) {    console.log(e.message);    return 'from_catch';  } finally {    console.log(2);  }}console.log(test()); // 1 throw 2 from_catch

看来,try和catch的return都需要先经过finally。

结语

只是一个很小的细节。但也希望各位看官好好利用这种特性。

转载地址:http://mwhlx.baihongyu.com/

你可能感兴趣的文章
maven web配置发布路径 cargo自动部署项目到tomcat
查看>>
linxu select 返回值
查看>>
代码中特殊的注释技术——TODO、FIXME和XXX的用处
查看>>
Android开发(20)--RadioGroup的使用
查看>>
iphone开发之获取网卡的MAC地址和IP地址
查看>>
【网站国际化必备】Asp.Net MVC 集成Paypal(贝宝)快速结账 支付接口 ,附源码demo...
查看>>
java中不常见的keyword:strictfp,transient
查看>>
INDEX--创建索引和删除索引时的SCH_M锁
查看>>
linux C(hello world)
查看>>
微信平台BAE
查看>>
数学图形之牟合方盖
查看>>
Objective-C-类(static)方法、实例方法、overwrite(覆写)、属性(property)复习...
查看>>
PHP多次调用Mysql存储过程报错解决办法
查看>>
mysql的二级索引
查看>>
Cobar是提供关系型数据库(MySQL)分布式服务的中间件
查看>>
Oracle当前用户SQL
查看>>
JavaScript学习笔记之下拉选择框的操作
查看>>
ProgressDialog使用总结
查看>>
安装完操作系统后,必备开发软件安装
查看>>
网络爬虫基本原理(一)
查看>>