为什么我需要避免在循环中使用 try-catch-finally

Jos*_*vic 8 javascript

每次执行 catch 子句时,try-catch-finally 构造都会在运行时在当前作用域中创建一个新变量,其中捕获的异常对象被分配给一个变量。

而不是使用…

var object = ['foo', 'bar'], i;  
for (i = 0, len = object.length; i <len; i++) {  
    try {  
        // do something that throws an exception 
    }  
    catch (e) {   
        // handle exception  
    } 
}
Run Code Online (Sandbox Code Playgroud)

为什么要用这个?

var object = ['foo', 'bar'], i;  
try { 
    for (i = 0, len = object.length; i <len; i++) {  
        // do something that throws an exception 
    } 
} 
catch (e) {   
    // handle exception  
} 
Run Code Online (Sandbox Code Playgroud)

有没有第一个选项比第二个选项更好的情况?写代码的时候是带着感觉去的,但是最近在想这个,不知道还有什么好想的。哪种解决方案更适合什么?

Jos*_*oco 10

第一个,“for...try”构造,如果您的对象内容抛出的单个异常没有严重到足以停止您的整个程序,那么它是最好的。如果您可以使用默认值或丢弃错误信息,这就是要走的路。

如果您的对象内容抛出的任何异常会使您的代码失败,则“try... for”构造是最好的。


小智 6

当错误发生时,第一个让你继续循环,第二个让你退出循环。

这就是重点