zoukankan      html  css  js  c++  java
  • try/catch/finally语句

    try/catch/finally语句是javascript的异常处理机制。其中try从句定义了需要处理的异常所在的代码块。catch从句跟随在try从句之后,当try块内某处发生了异常时,调用catch内的代码逻辑。catch从句后跟随finally块,后者中放置着清理代码。不管try块中是否产生异常,finally块内的逻辑总是会执行。

    try{

    //通常来讲,这里的代码会从头执行到尾而不产生任何问题;

    //但有时会抛出一个异常,要么是由throw语句直接抛出异常,要么是通过调用一个方法间接抛出异常

    }

    catch(e){

    //当且仅当try语句块抛出异常,才会执行这里的代码

    //这里可以通过局部变量e来获得对Error对象或者抛出的其他值得引用

    //这里的代码块可以基于某种原因处理这个异常,也可以忽略这个异常

    //还可以通过throw语句重新抛出异常

    }

    finally{

    //不管try语句是否抛出了异常,这里的逻辑总会执行,终止try语句块的方式有:

    // 1) 正常终止,执行完语句块的最后一条语句

    // 2) 通过break、continue或return语句终止

    // 3) 抛出一个异常,异常被catch从句捕获

    // 4) 抛出一个异常,异常未被捕获,继续向上传播

    }

    这里有个关于try/catch语句更实际的例子

    try{

     var n=Number(prompt("请输入一个正整数",""));

    var f=factorial(n);

    alert( n+" !=" +f);

    }

    catch(ex){

    alert(ex); //如果输入不合法,将执行这里的逻辑

    }

    通常情况下,解释器执行到try块的尾部,然后开始执行finally的逻辑,一遍进行必要的清理工作。当由于return、continue或break语句使得解释器跳出try语句块时,解释器在执行新的目标代码之前先执行finally块中的逻辑。

    如果在try语句块中产生了异常,而且存在一条与之相关的catch从句处理这个异常,解释器首先会执行catch中的逻辑,然后执行finally中的逻辑。如果不存在处理异常的局部catch从句,解释器会首先执行finally中的逻辑,然后向上传播这个异常,直到找到能处理这个异常的catch从句。

    如果finally块中使用了return、break或continue、throw语句使程序发生跳转,或者通过调用了抛出异常的方法改变了程序的执行流程,不管这个跳转使程序挂起还是继续执行,解释器都会将其忽略。例如,如果finally从句抛出一个异常,这个异常将代替正在抛出的异常。如果finally从句运行到了return语句,尽管已经抛出了异常且这个抛出的异常还没有处理,这个方法依然正常返回。

    var foo = function(){

      try{

      //抛出一个异常

         }

      finally{

        return 1; // 未处理异常直接返回,这里将正常返回

        }

    }

  • 相关阅读:
    [转化率预估-1]引言
    MATLAB 的输入输出命令
    MATLAB R2018a 输入中文却显示方框问号的问题
    支持向量机-SVM 学习
    MATLAB R2018a 安装教程
    【DeepLearning】用于几何匹配的卷积神经网络体系结构
    Alias Method for Sampling 采样方法
    关于机器学习的充分统计量
    java.lang.NullPointerException 空指针异常问题
    Eclipse导入项目时出错提示 project is missing required library
  • 原文地址:https://www.cnblogs.com/james2015/p/5089779.html
Copyright © 2011-2022 走看看