资讯专栏INFORMATION COLUMN

try-catch-finally,被你忽略掉的执行顺序

bbbbbb / 3142人阅读

摘要:是捕捉异常的神器,不管是调试还是防止软件崩溃,都离不开它。今天笔者介绍一下加上后的执行顺序嗯按顺序执行了。现在笔者在语句块中故意报错看来,和的都需要先经过。

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。

结语

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/107985.html

相关文章

  • try-catch-finally被你忽略掉的执行顺序

    摘要:是捕捉异常的神器,不管是调试还是防止软件崩溃,都离不开它。今天笔者介绍一下加上后的执行顺序嗯按顺序执行了。现在笔者在语句块中故意报错看来,和的都需要先经过。 try-catch是捕捉异常的神器,不管是调试还是防止软件崩溃,都离不开它。今天笔者介绍一下加上finally后的执行顺序 function test() { try { console.log(1); } fin...

    浠ラ箍 评论0 收藏0
  • 异常机制详解

    摘要:当运行时系统遍历调用栈而未找到合适的异常处理器,则运行时系统终止。不可查异常编译器不要求强制处置的异常包括运行时异常与其子类和错误。 目录介绍 1.什么是异常 2.异常 2.1 异常的概述和分类【了解】 2.2 JVM默认是如何处理异常的【理解】 2.3 异常处理的两种方式【理解】 2.4 try...catch的方式处理异常【掌握】 2.5 编译期异常和运行期异常的区别【理解】...

    wanghui 评论0 收藏0
  • try-catch-finally中的return

    摘要:基础系列的与方法类初始化顺序线程池如何弹性伸缩的几个要点的缓存什么场景下使用阻塞队列的使用及模式中的序本文主要简述中有的情况。参考关于中的执行顺序 Java基础系列 Java的hashcode与equals方法 Java类初始化顺序 ThreadPoolExecutor线程池如何弹性伸缩 HashMap的几个要点 Integer的缓存 什么场景下使用阻塞队列 volatile的使用及...

    fizz 评论0 收藏0
  • ES6被你忽略的尾调用

    摘要:被你忽略的尾调用尾调用是什么在有一个新特性尾调用用最简单的一句话描述就是某个函数的最后一步再调用另一个函数,听起来挺简单的,但是它的功能特别强大,直接给你撸个例子吧。如果函数内部还调用函数,那就还有一个的调用记录栈,以此类推。 title: 被你忽略的‘尾调用’date: 2017-05-02 16:52:22 tags: [ES6,javascript] 尾调用是什么? 在ES6有...

    xeblog 评论0 收藏0
  • 浅析Java异常处理机制

    摘要:关于异常处理的文章已有相当的篇幅,本文简单总结了的异常处理机制,并结合代码分析了一些异常处理的最佳实践,对异常的性能开销进行了简单分析。是程序正常运行中,可以预料的意外情况,应该被捕获并进行相应处理。 关于异常处理的文章已有相当的篇幅,本文简单总结了Java的异常处理机制,并结合代码分析了一些异常处理的最佳实践,对异常的性能开销进行了简单分析。博客另一篇文章《[译]Java异常处理的最...

    NSFish 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<