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. jmeter手写脚本,使用正则获取cookie(禁用cookies管理器)

    注:这里以bugfree为例 1.bugfree登录时会有重定向,这会导致每个URL都会有.因此要手动获取cookie的时候,需要去掉重定向勾选 正则获取动态PHPsession 获取到值后,放到信息 ...

  2. tomcat中如何禁止列目录下的文件

    tomcat中如何禁止列目录下的文件在{tomcat_home}/conf/web.xml中,把listings参数设置成false即可,如下: <servlet> <servlet ...

  3. Javaweb拦截器

    http://blog.csdn.net/reggergdsg/article/details/52962774

  4. 在Java的Condition接口【唤醒全部线程】

    在Java的Condition接口中,存在的几个方法跟Synchronized中的wait(),waitall(),wait(time ^),这个几个方法一一对应起来,但是在Lock.newCondi ...

  5. 唉 调皮的ListView

    唉 调皮的ListView 本次任务是 运用LisTView和自定义Adapter 来实现资料以列表的形式展现 来看代码 *** 布局代码老规矩 直接贴上 <LinearLayout andro ...

  6. Git的安装和使用

    在CentOS 6.x/7.x上安装git及最新版 方式一.yum安装 # yum install git 通过yum方式安装,版本比较旧,CentOS6.5上安装好是1.7.1版.如果想安装最新版或 ...

  7. jquery学习总结24-36

    一.jquery的自定义事件 1.自定义事件不能通过eventName()来添加,只能通过on来绑定 2.自定义事件需要通过trigger(自动触发)来进行触发 二.jauery事件命名空间 1.事件 ...

  8. mysql正则表达式无法识别\d

    无法识别\d 修改为[0-9]就ok

  9. java开发师笔试面试每日12题(1)

    1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码文件.Java被设计 ...

  10. Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes

    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes 题目连接: http://code ...