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

Javascript 为什么我需要避免在循环中使用try-catch-finally,javascript,Javascript,try-catch-finally构造在每次执行catch子句时在当前作用域中创建一个新变量,其中捕获的异常对象被分配给一个变量 而不是使用 var object = ['foo', 'bar'], i; for (i = 0, len = object.length; i <len; i++) { try { // do something that throws an exception } catch (e) {

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

而不是使用

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  
    } 
}
var object=['foo','bar'],i;
for(i=0,len=object.length;i如果对象内容引发的单个异常不严重到足以停止整个程序,则最好使用第一个“for…try”构造。如果您可以使用默认值或丢弃错误信息,这是最好的方法


“为……而努力”如果对象内容引发的任何异常会导致代码失败,则构造是最好的选择。

如果希望循环继续处理,则希望它位于循环内。如果希望基本上跳过当前迭代,但在下一个循环中继续,则将其置于循环内。例如,如果正在处理独立任务,则您可以将其放入循环中。所有异常都将显示在您的日志中。但是,如果您在进行下一次迭代之前需要上一次迭代(如fibonacci序列),则最好跳过整个循环(因为完成循环会浪费处理时间,从而引发大量异常)。在后一种情况下,它只会显示第一个异常,这可能足以让您上路。

当发生错误时,第一个异常允许您继续循环,第二个异常允许您退出循环


这就是它的要点

不同的逻辑,当错误发生时,第一个让你继续循环,第二个让你退出循环。你的用例取决于你是想在第一次发生异常时中断循环,还是想清理每次迭代。
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  
}