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

  • 相关阅读:
    for..of与for..in
    吉凶与祸福之辩证
    console.log(0.2+0.4===0.6)// true or false??
    Javascripte的原型链之基础讲解
    Vue之九数据劫持实现MVVM的数据双向绑定
    Object的方法
    Javscript的函数链式调用基础篇
    Object.keys
    Object.prototype.hasOwnProperty与Object.getOwnPropertyNames
    call和apply还有bind
  • 原文地址:https://www.cnblogs.com/binking338/p/4193559.html
Copyright © 2020-2023  润新知