为何try里面放return,finally还会执行,理解其内部机制

您所在的位置:网站首页 trycatchfinally里面有return 为何try里面放return,finally还会执行,理解其内部机制

为何try里面放return,finally还会执行,理解其内部机制

2023-10-13 13:20| 来源: 网络整理| 查看: 265

作用

try...catch语句标记要尝试的语句块,并指定一个出现异常时抛出的响应。

声明

try语句包含了由一个或者多个语句组成的try块,

和至少一个catch子句或者一个finally子句的其中一个,或者两个兼有, 下面是三种形式的try声明:

try...catch try...finally try...catch...finally try{ console.log('begin throw error') throw 'this is a error' console.log('Will it work here ? ') } catch(e){ console.log('e:',e) } //打印结果 begin throw error e: this is a error

从结果可以看到

如果在try块中有任何一个语句(或者从try块中调用的函数)抛出异常,控制立即转向catch子句。

finally语句 function foo(){ try{ return 0; } catch(err) { //TODO return 1; } finally { console.log("a") } } console.log(foo()); //打印结果 a 0

可以看到先执行finally 在执行try里面的return

function foo(){ try{ throw 'this is a error' } catch(e) { //TODO console.log('e:',e) return 1; } finally { console.log("a") } } console.log(foo()); //打印结果 e: this is a error a 1

可以看到 先执行return之前的语句 再执行finally 最后执行return

function foo() { try { // throw 'this is a error' return 0; } catch (e) { } finally { console.log("a"); return "finally end"; } } console.log(foo()); //打印结果 a finally end

可以看到 finally 里的return"覆盖了"了try中的return

MDN中有一句话:

如果从finally块中返回一个值,那么这个值将会成为整个try-catch-finally的返回值,无论是否有return语句在try和catch中。这包括在catch块里抛出的异常。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3