JavaScript中try catch finally 使用

14年前
在IE泄漏中处理是遇到的方法,通过try..catch..finally方式:
Java代码 复制代码
  1. function createButton(){   
  2.  var obj = document.createElement("button");   
  3.  obj.innerHTML="点我!";   
  4.  obj.onclick=function(){   
  5.    //处理click事件   
  6.  }   
  7.  obj.onmouseover=function(){   
  8.    //处理mouseover事件   
  9.  }   
  10. try{   
  11.   return obj;   
  12.  }finally{   
  13.    obj = null;//在return 之后才执行,解决了在return后将obj置null问题   
  14.  }   
  15. }   


错误处理结构:  
Java代码 复制代码
  1. try{      
  2.     tryStatements   
  3. }      
  4. catch(exception){      
  5.     catchStatements}      
  6. finally{      
  7.     finallyStatements   
  8. }     

参数:  
   tryStatement    
   必选项。可能发生错误的语句。    
   exception    
   必选项。任何变量名。exception的初始化值是扔出的错误的值。    
   catchStatement    
   可选项。处理在相关联tryStatement中发生的错误的语句。    
   finallyStatements    
   可选项。在所有其他过程发生之后无条件执行的语句。    

说明:     
如果在tryStatements中发生了一个错误,则程序控制被传给catchStatements来处理 ,错误处理发生之后,将会执行finallyStatements中语句。

Java代码 复制代码
  1. (function(){   
  2.     try{   
  3.        console.info('1');   
  4.        return 'try begin'   //1   
  5.     }catch(e){   
  6.        console.info('2');   
  7.        return 'try catch'   //2    
  8.     }finally{   
  9.        console.info('3');   
  10.        return 'try finally' //3   
  11.     }   
  12. })();  

执行上述代码,发现在1返回return前将会执行到finally,如果其中有return那么函数执行返回,否则执行到1处return返回。如果注释掉3将会返回什么呐?

catch中e.name错误类型:
  • 1. EvalError:eval()的使用与定义不一致
  • 2. RangeError:数值越界
  • 3. ReferenceError:非法或不能识别的引用数值
  • 4. SyntaxError:发生语法解析错误
  • 5. TypeError:操作数类型错误
  • 6. URIError:URI处理函数使用不当