[JavaScript]catch(ex)语句中的ex

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进行了赋值。这个现象很奇特,变量名解析的优先级被捕获异常的标识符覆盖。

时间: 2024-10-12 12:46:43

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

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

Java中try catch finally语句中含有return语句的执行情况(总结版) 有一点可以肯定,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也是不建议在finally中return的原因.下面来看这几种情况. 情况一(try中有return,finally中没有return): [java] view plain copy public class TryTest{ public 

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

在这里看到了try >但有一点是可以肯定的,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也是不建议在finally中return的原因.下面来看这几种情况. 情况一(try中有return,finally中没有return): public class TryTest { public static void main(String[] args) { System.out.println(t

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

finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也是不建议在finally中return的原因.下面来看这几种情况. 情况一(try中有return,finally中没有return): public class TryTest{ public static void main(String[] args){ System.out.println(test()); } private static

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

一.用switch选择星期几 这时case为  例:case="星期一" 二.用switch选择单纯的数字 这时case为  例:case='1' 三.用switch选择一个应用了函数的值 例:switch(preseInt(grade/10)){ case=6: document.write("该同学成绩为中") } 请问case后面的引号什么时候加,什么时候不加有具体的分类么 第一次写,希望大神可以指点一下,后日必深入研究

try~Catch语句中异常的处理过程

[2014/10/12 21:40]文章待续~ 1.函数自身捕获处理异常的情况 下面的例子介绍了try~catch语句中出现异常时语句的执行顺序: package month10; import java.lang.*; public class TryCatch{ /* * 函数产生一个ArithmeticException异常 */ public static void First(){ System.out.println("第一个异常处理的例子"); try{ //double

在aardio的函数里try...catch语句中使用return。

try{ error("错误信息"); //使用error可以抛出一个错误 //如果error函数在try语句中,程序将不会报错,而会直接跳出try语句 } catch(e){ //如果try语句后跟catch语句则可以捕获到这个错误信息e } 以上是try...catch的语法: try语句尝试执行一个语句块,遇到错误则退出try语句块而不是中断aardio程序.如果使用了catch语句块就可以捕获异常(catch语句块是可选的). 以上是在aardio使用手册中的一段话. 也许在使

Javascript跳转语句

跳转语句,从名称上就可以看出,它使得Javascript的执行可以从一个位置跳转到另一个位置.break语句是跳转到循环或者其他语句的结束,continue语句是终止本次循环的执行并开始下一次循环的执行.Javascript中的语句可以命名或带有标签,break和continue可以标识目标循环或者其他语句标签. return语句让解释器跳出函数体的执行,并提供本次调用的返回值.throw语句触发或者抛出一个异常,它是与try/catch/finally语句一同使用的,这些语句指定了处理异常的代

javascript的return语句简单介绍

javascript的return语句简单介绍:return语句在js中非常的重要,不仅仅具有返回函数值的功能,还具有一些特殊的用法,有个清晰的把握是非常有必要的.下面就结合实例简单介绍一下return语句的作用.一.用来返回控制和函数结果:通常情况,return语句对于一个函数是很有必要的,因为往往需要函数在一系列的代码执行后会得到一个期望的返回值,而此值就是通过return语句返回,并且将控制权返回给主调函数.语法格式: return 表达式 代码实例如下: function add(){

javascript如何遍历数组中的每一个元素

javascript如何遍历数组中的每一个元素:遍历数组中的所有元素是一个非常基础简单的操作,可能初学者还不够了解,下面就通过代码实例介绍一下如何实现此功能.代码如下: var theArray=["蚂蚁部落","青岛市南区","新锐科技",3]; for(var index=0;index<theArray.length;index++) { console.log(theArray[index]); } 以上代码可以遍历数组中的每一个元