JavaScript中的嵌套try...catch示例

JavaScript中嵌套的try…catch

// 第一种情况
try {
    try {
        throw new Error('oops'); //=> 抛出一个error对象,对象的message为'oops'
    }
    finally {
        console.log('finally'); //=> 无论是否抛出异常都会执行
    }
}
catch (ex) {   //=> 捕获到内部try语句抛出的异常对象
    console.error('outer', ex.message); //=> "outer oops"
}


// 第二种情况
try {
    try {
        throw new Error('oops');
    }
    catch (ex) {   //=> 捕获内部异常对象
        console.error('inner', ex.message); //=> 'inner oops'
    }
    finally {
        console.log('finally'); //=> 依然执行
    }
}
catch (ex) {  //=> 这里并不会被触发,因此后面的语句也不会执行
    console.error('outer', ex.message); //=> 不会执行
}

// 第三种情况

try {
    try {
        throw new Error("inner error");
    } catch (e) {
        console.log(e.message); //=> 输出inner error
        throw e;
    } finally {
        console.log("finally") //=> finally
    }
} catch (e) {
    console.log(e.message); //=> 依然是输出inner error
}

// 第四种情况,从finally块返回(return)

// 将整个执行代码放入匿名函数中
(function() {
    try {
        try {
            throw new Error('oops'); //=> 抛出一个异常对象
        }
        catch (ex) {
            console.error('inner', ex.message); //=> 正常执行 输出为inner oops
            throw ex; //=> 因为finally块中有return语句,因此这里的代码会被挂起,而不会被执行
        }
        finally {
            console.log('finally'); //=> 正常执行
            return;  //=>返回undefined
        }
    }
    catch (ex) {
        console.error('outer', ex.message); //=> 这里的外部catch子句不会被执行,因为内部catch的重新抛出异常语句被忽略了,
                                            // 因此不会再次触发异常,所以这里的catch块不会被触发。
    }
})();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值