关于错误处理程序中【return】的用法
先让俺这位新人帮各位有幸游览到我博客文章的叔叔阿姨哥哥姐姐们解释一下什么是错误处理?即:当程序发生错误时,保证程序不会异常中断的机制。
那么为什么程序中会有错误处理呢?像我们通常无论是玩手机或者玩游戏的时候,可能在运行过程中,程序默认只要碰到错误就会闪退,这时候的用户体验极差!而这个错误处理程序中的(err)会在错误发生时,自动获得一个错误对象,在发生错误时,自动创建,来避免这个错误。
接下来俺要说的不是错误处理,而是return在try{}catch{}finally{}中的用法。
首先,这是一个错误处理的基本流程:
try{
可能发生错误的代码段
}catch(err){
如果发生错误,才执行的错误处理代码
}finally{
无论是否发生异常,都会执行的代码段
}
其实finally可省略。
让我们来看第一种最简单的return用法:(程序即不报错,而且finally部分没有return):
这时候,看后台输出的值是否和你们心中想的值是一样的呢?
其实在错误程序里,表达式只要被读到,就会将变量替换为值,在该题中,try{}里面的n++无论无何都是被读到的,在接下来的几题中这部分也都会被读到,因为try{}是这条程序的必经之路,n此时都会被+1,而catch{}这部分会被直接跳过(没有错误不执行),再到finally{}。
再看第二种:(即在try{}中出现报错,而且finally部分没有return))
这时候的console.log(fun())返回的值是看return在哪家,n从try{}再到catch{},n变成了3,故第一个返回3,而无论无何,finally都是会被执行的!
接下来是第三种情况:(程序不报错,并且finally{}中有返回return存在的情况)
因为是不报错,所以程序直接跳过catch{}部分,这时候我们看到了两个return,这时候请注意:finally{}中的return会直接顶掉try{}中的return。
最后一种情况:(既报错,finally{}又有return的情况)
这种情况有两个变种,第一是在try{}中有报错,而且在最后finally{}中有return的返回值,
这种情况说复杂有点复杂,说简单有点简单,因为无论无何,finally有是要执行的,而且return也会顶掉上面的两个return。
综上所述:我们可以的得出return在错误处理中的一般性结论:
1. finally中没有return
如果不出错,首先会确定try中return的结果
**再执行finally中的代码
最后返回结果
finally中的代码不会影响返回的结果
如果出错,首先执行catch中的代码
确定catch中return的结果
**再执行finally中的代码
最后返回结果
finally中的代码不会影响返回的结果
2.finally中有return,finally中的return会覆盖之前的所有return
如果您坚持看完了俺写的文章,这是我第一次写博客,有些激动也有些生疏,第一次知道写博客是可以插入代码的,早知道我就不通过截图来完成了。另外,这仅仅是本人在上课做笔记时的一些看法,一时心血来潮想要跟广大JS爱好者分享,为这个代码社区增贴点活力!这也可能仅仅是在将来去公司面试时可能会遇到的情况,我们都知道错误处理其实也可以用if(){}else{}代替,而且执行效率也会更高!谢谢!下次我一定再接再厉!
关于错误处理程序中【return】的用法的更多相关文章
- php中return的用法实例分析
本文实例讲述了php中return的用法.分享给大家供大家参考.具体分析如下: 首先,它的意思就是返回;return()是语言结构而不是函数,仅在参数包含表达式时才需要用括号将其括起来.当返回一个变量 ...
- JavaScript中return的用法详解
JavaScript中return的用法详解 最近,跟身边学前端的朋友了解,有很多人对函数中的this的用法和指向问题比较模糊,这里写一篇博客跟大家一起探讨一下this的用法和指向性问题. 1定义 t ...
- [转载]js中return的用法
一.返回控制与函数结果,语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果 二.返回控制,无函数结果,语法为:return; 在大多数情况下,为事件处理函 ...
- JAVA中return的用法
public class TestReturn { public static void main(String args[]) { TestReturn t = new TestReturn(); ...
- python中 return 的用法
return 语句就是讲结果返回到调用的地方,并把程序的控制权一起返回 程序运行到所遇到的第一个return即返回(退出def块),不会再运行第二个return. 要返回两个数值,写成一行即可: de ...
- python中return的用法
def testReturn(x): if x > 10000: return print "test return!!" #这句话永远不会得到执行 elif x > ...
- js中return的用法
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- javascript中 IE事件处理程序中try catch用法
本例是学习中笔记 望指正批评! <input id='b1' type='button' value='按钮'/> <script> window.onload=functio ...
- JavaScript中return的用法和this的用法详解
JavaScript中return的用法详解 最近,跟身边学前端的朋友了解,有很多人对this和函数中的return的用法和意思理解的比较模糊,这里写一篇博客跟大家一起探讨一下return和this的 ...
随机推荐
- Linux 网卡驱动学习(一)(分析一个虚拟硬件的网络驱动样例)
在Linux,网络分为两个层,各自是网络堆栈协议支持层,以及接收和发送网络协议的设备驱动程序层. 网络堆栈是硬件中独立出来的部分.主要用来支持TCP/IP等多种协议,网络设备驱动层是连接网络堆栈协议层 ...
- C 实现strcmp,strcpy,strcat函数
基于C语言的strcmp,strcpy,strcat函数的实现.C语言是一个程序猿的基础,一定要重视. char* strcat ( char * dst , const char * src ) { ...
- odoo8.0条形码改为js方式处理
群里网友@上海-gavin 提供的odoo条形码处理,将原来的图片生成方式改为js处理方式. <div class="row text-center"> <div ...
- Keep-Alive简介及在Tomcat中配置
Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接.市场上 的大部分Web服务器,包括iPlanet.IIS和 ...
- asp.net web系统开发浏览器和前端工具
1. Firefox浏览器+firebug插件 下载安装Firefox浏览器后,在菜单-附加组件-扩展中,搜索firebug,下载长得像甲虫一样的安装. 在web调试中,直接点击右上角的虫子,即可调出 ...
- excel单元格内插入选择项pass、fail、not support等
1.点击菜单栏的数据—-->>数据验证 2.选择 序列 在 来源 选项中填入Pass,Fail,On Going,Not Support 3.在选中的单元格并在菜单栏选中 新建规则
- ace admin 下拉选择Multiple-select组件
一.组件说明以及API 1.第一个组件是写bootstrap table的主人公 wenzhixin 封装的一个组件—— multiple-select.这个组件风格简单.文档全.功能强大.但是觉得它 ...
- sql server 函数--rand() 生成整数的随机数
rand() 定义: 返回从0到1之间的随机浮点值. 举例说明: select rand() as 随机数 结果如图: select cast( floor(rand()*N) as int ) ...
- C++语言基础(12)-虚函数
一.虚函数使用的注意事项 1.只需要在虚函数的声明处加上 virtual 关键字,函数定义处可以加也可以不加. 2.为了方便,你可以只将基类中的函数声明为虚函数,这样所有子类中具有遮蔽(覆盖)关系的同 ...
- libevent源码学习_event_test
对应的sample文件中提供了event_test.c,里面就是关于事件的简单示例,具体如下: /* * Compile with: * cc -I/usr/local/include -o even ...