为何try里面放return,finally还会执行,理解其内部机制 |
您所在的位置:网站首页 › trycatchfinally里面有return › 为何try里面放return,finally还会执行,理解其内部机制 |
作用
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 |