深入理解JavaScript中的try catch finally
在日常开发中,我们经常使用try catch 来捕捉错误,来提升应用程序的健壮性,但是,大部分时候,只是惯性使用,很少静下来去深入理解一下try catch finally,所以本文将对try catch finally 深入的进行讨论,本文主要内容如下:
- try catch finally 的关系
- 异常与返回值
try catch finally 的关系
finally 中的代码总是会在 try 之后执行,如果有 catch 的话则在 catch 之后执行。也可以将 finally 中的代码看作一个回调函数,即无论出现什么情况最后一定会被调用。
这是《你不知道的JavaScript 中卷》中的话,也就是说finally总是在最后执行,catch可有可无,但是try后面至少要跟一个(catch,finally,both)处理块
function test() {
try {
//...
}
catch(e) {} //可以加也可以不加
finally{
// 总是会执行的
}
}
异常与返回值
看如下这段代码:
function foo() {
try {
return 42;
}finally {
console.log('foo finally')
}
}
console.log(foo())
这里 return 42先执行,然后try执行完毕,接着执行finally,最后foo()函数执行完毕,console.log(...)显示返回值。

就算是try中抛出了异常,也还是如此

但是,如果 finally中抛出了异常,则try中返回值会被丢弃。
通常来说,如果在函数中省略return的结果和return,则默认会返回undefined。但是在finally中会返回前面的return设定的返回值。
这里的“前面的”指的是,try或者catch的return。
function foo() {
try {
return a
}catch (e) {
return "错误!!!"
}
finally {
}
}
console.log(foo())

深入理解JavaScript中的try catch finally的更多相关文章
- 全面理解Javascript中Promise
全面理解Javascript中Promise 最近在学习Promise的时候,在网上收集了一些资料,发现很多的知识点不够系统,所以小编特意为大家整理了一些自认为 比较好的文章,供大家更好地学习js中非 ...
- 理解JavaScript中的原型继承(2)
两年前在我学习JavaScript的时候我就写过两篇关于原型继承的博客: 理解JavaScript中原型继承 JavaScript中的原型继承 这两篇博客讲的都是原型的使用,其中一篇还有我学习时的错误 ...
- 深入理解JavaScript中创建对象模式的演变(原型)
深入理解JavaScript中创建对象模式的演变(原型) 创建对象的模式多种多样,但是各种模式又有怎样的利弊呢?有没有一种最为完美的模式呢?下面我将就以下几个方面来分析创建对象的几种模式: Objec ...
- 深入理解JavaScript中的属性和特性
深入理解JavaScript中的属性和特性 JavaScript中属性和特性是完全不同的两个概念,这里我将根据自己所学,来深入理解JavaScript中的属性和特性. 主要内容如下: 理解JavaSc ...
- 深入理解javascript中执行环境(作用域)与作用域链
深入理解javascript中执行环境(作用域)与作用域链 相信很多初学者对与javascript中的执行环境与作用域链不能很好的理解,这里,我会按照自己的理解同大家一起分享. 一般情况下,我们把执行 ...
- 【干货理解】理解javascript中实现MVC的原理
理解javascript中的MVC MVC模式是软件工程中一种软件架构模式,一般把软件模式分为三部分,模型(Model)+视图(View)+控制器(Controller); 模型:模型用于封装与应用程 ...
- 理解javascript中的策略模式
理解javascript中的策略模式 策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换. 使用策略模式的优点如下: 优点:1. 策略模式利用组合,委托等技术和思想,有效 ...
- 深入理解javascript中的立即执行函数(function(){…})()
投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-06-12 我要评论 这篇文章主要介绍了深入理解javascript中的立即执行函数,立即执行函数也叫立即调用函数,通常它的写法是 ...
- 转载 深入理解JavaScript中的this关键字
转载原地址: http://www.cnblogs.com/rainman/archive/2009/05/03/1448392.html 深入理解JavaScript中的this关键字 1. 一 ...
- js架构设计模式——理解javascript中的MVVM开发模式
理解javascript中的MVVM开发模式 http://blog.csdn.net/slalx/article/details/7856769 MVVM的全称是Model View ViewMod ...
随机推荐
- yb课堂实战之播放记录表设计和模块开发 《十五》
play_record表设计 DROP TABLE IF EXISTS `play_record`; CREATE TABLE `play_record` ( `id` int(11) NOT NUL ...
- Sql Client Show All Conten Of A Field
Terminate the query with \G in place of ; For example: SELECT content_txt FROM sometable\G
- Eggjs 设置跨域请求 指定地址跨域 nodejs
首先egg自身框架没有直接设置允许跨域请求的功能和接口,所以需要第三方包来设置跨域请求! 先安装第三方包来设置跨域,使用egg-cors // npm npm i egg-cors --save // ...
- axios和AJAX的区别
axios和ajax的区别 Axios和Ajax都是用于处理网络请求和与服务器进行通信的技术,但它们之间存在一些关键的区别:12 一.技术基础:Ajax(Asynchronous JavaScript ...
- ComfyUI进阶:Comfyroll插件 (一)
ComfyUI进阶:Comfyroll插件 (一) 前言: 学习ComfyUI是一场持久战,而Comfyroll Studio 是一款功能强大的自定义节点集合,专为 ComfyUI 用户打造,旨在提供 ...
- CentOS 8安装docker
1.查看Linux内核(Docker最低支持CentOS 7 64位 内核3.10) uname -a 2.安装docker(输入yes,然后等待-) yum install docker 3.启动d ...
- 史上最详细的Composer安装tp5教程
Composer安装tp5教程1.下载composer先介绍几个网站Composer官网https://getcomposer.org/ Composer中文网http://www.phpcompos ...
- [oeasy]教您玩转python - 0002 - 你好世界(hello world!)
你好世界 回忆上次内容 这次我们, 了解了 Python 进入了 Python 退出了 Python 这并不难 这就是我们对于 Python 的初体验 恭喜您存活了下来! 编辑 python ...
- AI时代你应聚焦的领域在哪里
1. 每个人都应该拥抱AI 随着AI的飞速发展,把我们带到了一个全新的时代.在这个时代,AI将逐步渗透到各个方面,比如:自动驾驶.智能家居.医疗诊断.大模型等等.每个人都应该积极拥抱AI,让AI给我们 ...
- 假期小结7爬虫学习requests
这周我初步学习了py爬虫的相关知识,以下是我的部分总结 URL headers(URL头部)是HTTP请求中包含的一部分信息,用于描述.控制和传递请求的各种元数据.它们是位于HTTP请求消息的起始部分 ...