try/catch语句是JavaScript语句提供的异常处理机制,一旦try语句块内部的语句抛出异常,在catch语句块即可捕获到Error类型的异常信息。我们知道JavaScript里是没有块作用域的,但是这个常识却在catch语句块里面得到了相反的现象。看如下代码:

(function(){
try{
throw new Error("error");
}
catch(ex){
console.log(ex.message);
}
finally{
console.log("final");
}
console.log(ex);
})();

上述代码中最后一行控制台输出(console.log(ex); )将会抛出异常提示,没有ex这个标识符。这个现象表明,在catch语句块里,ex的作用域仅仅局限在语句块内部,外部将无法解析到ex这个标识符。

将上述代码做个小调整,在catch内部再次申明ex为变量。

(function(){
try{
throw new Error("error");
}
catch(ex){
console.log(ex.message);
var ex = "ex string";
}
finally{
console.log("final");
}
console.log(ex);
})();

这个时候最后一行控制台输出(console.log(ex); )不抛异常了,但是他输出的却是undefined值,catch语句块里的赋值语句并没有作用到里面申明的ex变量上,而是给catch捕获的ex进行了赋值。这个现象很奇特,变量名解析的优先级被捕获异常的标识符覆盖。

[JavaScript]catch(ex)语句中的ex的更多相关文章

  1. 【转】Java中try catch finally语句中含有return语句的执行情况(总结版)

    Java中try catch finally语句中含有return语句的执行情况(总结版) 有一点可以肯定,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有r ...

  2. 今天在2cto网站看到一个有关try{}catch(){}finally{}语句中含有return的讲解,理解很透彻。

    publicclassTrycatchTest{ publicstaticvoidmain(String[]args){ System.out.println("x:"+newTr ...

  3. Java中try catch finally语句中含return语句的执行情况总结-编程陷阱

    前言:有java编程基础的人对java的异常处理机制都会有一定了解,而且可能感觉使用起来也比较简单,但如果在try catch finally语句块中遇到return语句,开发者可能就会遇到一些逻辑问 ...

  4. Java中try catch finally语句中含有return语句的执行情况(总结版)

    在这里看到了try >但有一点是可以肯定的,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也 ...

  5. try...catch..finally..语句中,finally是否必须存在?作用是什么

    try { } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ } 1: ...

  6. Java中try catch finally语句中含有return语句的执行情况

    finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也是不建议在finally中return的原因.下面 ...

  7. python 中 try catch finally语句中含有return语句的执行情况

    无论是在try还是在except中,遇到return时,只要设定了finally语句,就会中断当前的return语句,跳转到finally中执行,如果finally中遇到return语句,就直接返回, ...

  8. JavaScript对于switch语句中的case后键入值的带不带引号

    一.用switch选择星期几 这时case为  例:case="星期一" 二.用switch选择单纯的数字 这时case为  例:case='1' 三.用switch选择一个应用了 ...

  9. Java异常处理中finally中的return会覆盖catch语句中的return语句

    Java异常处理中finally中的return会覆盖catch语句中的return语句和throw语句,所以Java不建议在finally中使用return语句 此外 finally中的throw语 ...

随机推荐

  1. 堆&栈的理解(转)

    (摘自:http://www.cnblogs.com/likwo/archive/2010/12/20/1911026.html) C++中堆和栈的理解 内存分配方面: 堆: 操作系统有一个记录空闲内 ...

  2. Oracle启动和停止

    概述 只有具备sysdba和sysoper系统特权的用户才能启动和关闭数据库. 在启动数据库之前应该启动监听程序,否则就不能利用命令方式来管理数据库,包括启动和关闭数据库. 虽然数据库正常运行,但如果 ...

  3. linux学习第十四天 (Linux就该这么学)找到一本不错的Linux电子书

    今天老师讲了,DNS的相关,安装,配置,由来,13台根服务器,配置了主服务器,从服务器,和缓存服务器,等,今天补个大概吧,没有 记  还有正向解析,反向解析.

  4. sqlserver全文检索

    转载地址:https://www.cnblogs.com/qianzf/p/7131741.html

  5. css firefox火狐浏览器下的兼容性问题

    1.DOCTYPE 影响 CSS 处理 2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行 3.FF: body 设置 text-al ...

  6. Altium Designer 16 问题解决

    1:同一个工程中,不同原理图里的网络标号不能关联起来 解决--->   选择  工程->工程参数->网络识别符范围 -> GLOBAL 2:PCB中影藏显示相应Net的飞线 解 ...

  7. 【JavaWeb】防止表单的重复提交

    https://www.cnblogs.com/yfsmooth/p/4516779.html 看了以下别人给的总结: 客户端上防止提交: 1.js控制阻止 2.设置HTTP报头,控制表单缓存,使得所 ...

  8. hive插入数据-单条

    写入数据到hive的hdfs文件中即可,hive创建表的时候用小写做表名,不然查不到 相关操作如下: 查看目录与表 hive> dfs -ls /user/hive/warehouse/ 准备h ...

  9. shiro简单配置 (写的不错 收藏一下)

    抄袭的连接:https://blog.csdn.net/clj198606061111/article/details/24185023 注:这里只介绍spring配置模式. 因为官方例子虽然中有更加 ...

  10. 基于UML网络教学管理平台模型的搭建

    一.基本信息 标题:基于UML网络教学管理平台模型的搭建 时间:2013 出版源:网络安全技术与应用 领域分类:UML:网络教学管理平台:模型 二.研究背景 问题定义:网络教学管理平台模型的搭建 难点 ...