JavaScript学习(5.5.6):跳转之try/catch/finally语句

try/catch/finally语句
      try/catch/finally语句是JavaScript的异常处理机制。其中try从句定义了需要处理的异常所在代码块。catch从句跟随在try从句之后,当try块内某处发生了异常时,调用catch内的代码逻辑。catch从句后跟随finally块,后者中放置清理代码,不管try块中是否产生异常,finally块内的逻辑总是会执行的。尽管catch和finally都是可选的,但try从句需要至少二者之一组成完整的语句。try、catch和finally语句块都需要使用花括号括起来,这里的花括号是必需的,即使从句中只有一条语句也不能省略花括号。
     try{
         //通常来讲,这里的代码会从头执行到尾而不会产生任何问题
         //但有时会抛出一个异常,要么是由throw语句直接抛出异常,
         //要么是通过调用一个方法间接抛出异常
     }catch( e ){
         //当且仅当try语句块抛出异常,才会执行这里的代码
         //这里可以通过局部变量e来获取对Error对象或者抛出的其他值的引用
         //这里的代码块可以基于某种原因处理这个异常,也可以忽略这个异常
         //还可以通过throw语句抛出异常
     }finally{
         //不管try语句块是否抛出了异常,这里的逻辑总会执行,终止try语句块的方式:
         // 1.正常终止,执行完语句块的最后一条语句。
         //2.通过break、continue或return语句终止。
         //3.抛出一个异常,异常被catch从句捕获。
         //4.抛出一个异常,异常未被捕获,继续向上传播。
     }

    通常情况下,解释器执行到了try块的尾部,然后开始执行finally中的逻辑,以便进行必要的清理工作。由于return、continue或break语句使得解释器跳出了try语句块时,解释器在执行新的目标代码之前先执行finally块中的逻辑。
     如果在try中产生了异常,而且存在一条与之相关的catch从句来处理这个异常,解释器会先执行catch中的逻辑,然后执行finally的逻辑如果不存在处理异常的局部catch从句,解释器会首先执行finally中的逻辑。然后向上传播这个异常,知道找到能处理这个异常的catch从句。
     如果finally块中使用了return、continue、break或者throw语句使程序发生跳转,或者通过调用了抛出异常的方法改变了程序执行的流程,不管这个跳转使程序挂起还是继续执行,解释器都会将其忽略。例如finally从句抛出一个异常,这个程序将替代正在抛出的异常。如果finally从句运行到了return语句,尽管已经抛出了异常且这个抛出的异常还没有处理,这个方法依然会正常返回。
var foo = function(){
  try{
     return 0;
  }
  finally{
      return 1;
  }
}
foo();   //1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值