try{}catch(){}finally{}
先执行try中的代码,如果发生异常则进入catch,最后执行finally
各个层级抛出不同的异常
try语句如果抛出异常,则执行catch语句,否则不执行,无论有没有异常,都执行finally语句;try语句必须跟catch或finally语句中至少一个组合使用。
try catch语句的嵌套语句执行顺序:
1)如果内部嵌套的try语句抛出异常,但内部没有相配套的catch语句,先执行内部的finally语句,然后跳到最近一层的catch语句执行。
2)如果内部嵌套的try语句抛出异常,内部有相配套的catch语句,先执行此语句处理异常,再执行内部的finally语句。不会再在外部处理异常。
3)如果内部嵌套的try语句抛出异常,内部有相配套的catch语句,并且catch语句也抛出异常,如果内部的catch语句有对异常的处理,先执行异常处理语句,然后执行内部的finally语句,最后执行离内部catch语句抛出异常最近一层的catch语句处理异常。
Try catch的执行顺序
try...catch...finally
try后面必须至少跟一个catch语句或者finally语句,即可能存在三种格式
try {...} catch(e) {...} 捕获到异常执行catch语句
try {...} finally {...} 不管中间有无异常都要执行finally
try {...} catch(e) {...} finally{...} 两者结合
如下图嵌套语句执行顺序,首先内部try抛出异常,catch语句捕获异常,同时又抛出了一个异常,然后执行内部finally语句,外层catch捕获内层异常
try { throw "xxx"; } catch (ex) { console.log(ex); } finally { console.log("finally"); }
try...catch异常处理,需二刷!
异常内部处理过以后外面不再处理
try catch嵌套
这里虽然在内部catch处理了第一步抛出的异常,但是在catch中又抛出了异常没有得到处理,所以这个异常会抛给外部的catch进行处理。所以内部执行完输出“inner”“oops”“finally”后,会在外部输出“outer”“oops”
先执行内部try语句抛出异常,然后执行内部catch处理异常输出“inner”“oops”,之后执行内部finally输出“finally”。因为已经在内部处理了异常所以不会再在外部处理异常。
先执行try语句抛出异常,然后执行内部finally从句,输出“finally”;之后再在外部执行catch从句处理异常,输出“outer”“oops”。
try catch提供了一个异常捕获的机制,它的执行流程:首先执行try块中的代码;如果抛出了异常会由catch从句捕获并执行,如果没有发生异常catch中的代码就会被忽略掉;不管有没有异常最后都会执行finally从句。try后面可以接着一个catch或一个finally,也就是说js中try catch可以有三种形式:try catch/try finally/try catch finally
123456
123456
try catch 嵌套
内部的有catch时先处理,然后finally,但是没有catch,或者catch里再抛出异常,finally完,走最近的catch;
异常在里面已经处理过了,就不会再到外面处理了
内部捕获异常后又抛出异常,
内容的异常没有处理抛给外面了,那里面的finally会先执行
异常在里面已经处理过了,就不会再到外面处理了
如果里面抛出异常,则必须要接住异常,但是里面的finally会先执行,所以会先显示finally,再ouer,oops
try finally
throw抛出异常,catch捕获异常,finally最后都会被执行
try catch finally
抛出异常会寻找最近的catch语句进行异常处理
try catch 2
try{} //抛出异常
catch(){} //捕获异常
finally{} //最后必须执行
catch 或 finally 或 catch+finally
嵌套时如图:抛出异常,如果内部没有捕获异常,则必须先执行finally再被外部捕获异常
try catch嵌套
异常会寻找最近的catch处理
try catch语句:三种形式,try catch,try finally,try catch finally;
先执行try,错误就执行catch,true就忽略catch,finally是不管对错都执行。