try/catch/finally语句

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

try{java

//一般来说,这里的代码会从头执行到尾而不产生任何问题;对象

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

}io

catch(e){function

//当且仅当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; // 未处理异常直接返回,这里将正常返回

    }

}

相关文章
相关标签/搜索