首页 > 代码库 > [JavaScript]catch(ex)语句中的ex

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

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