设为首页 加入收藏

TOP

[JavaScript]catch(ex)语句中的ex
2015-11-10 13:46:11 来源: 作者: 【 】 浏览:8
Tags:JavaScript catch 语句

try/catch语句是java script语句提供的异常处理机制,一旦try语句块内部的语句抛出异常,在catch语句块即可捕获到Error类型的异常信息。我们知道java script里是没有块作用域的,但是这个常识却在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进行了赋值。这个现象很奇特,变量名解析的优先级被捕获异常的标识符覆盖。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇你知道 Linux 内核是如何构建的吗.. 下一篇Shell数组:Shell数组的定义、数..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: