Javascript 是否可以只使用一个try-catch块捕获多个异常?

Javascript 是否可以只使用一个try-catch块捕获多个异常?,javascript,exception,exception-handling,closures,Javascript,Exception,Exception Handling,Closures,在此javascript代码f.init()中,控制程序的整个流程: var f = function() { return { init: function(var1) { try { f.f1(1) } catch (e) { alert(e); } try { f.f2(1)

在此javascript代码
f.init()
中,控制程序的整个流程:

var f = function() {
    return {
        init: function(var1) {
            try {
                f.f1(1)
            } catch (e) {
                alert(e);
            }
            try {
                f.f2(1)
            } catch (e) {
                alert(e);
            }
            // ...
            // more try-catch blocks                
            // ...
        },
        f1: function() {
            throw Error('f1 called');
        },
        f2: function() {
            throw Error('f2 called');
        }
    };
}();

f.init();
如何将所有异常管理集中在一个try-catch块中?大概是这样的:

var f = function() {
    return {
        init: function(var1) {
            f.f1(1) // this cut the control flow if thrown some error
            f.f2(1) // so this is not called
        },
        f1: function() {
                throw Error('f1 called');
        },
        f2: function() {
                throw Error('f2 called');
        }
    };
}();

try {
    f.init();
} catch (e) {
    alert(e);
}

前面的代码在抛出一些错误后切断了流。

您不能。一旦抛出错误,程序流就会中断。

您不能。但有一个技巧可以处理多次捕获:

try{

 try{
   firstTrial();
 }
 catch(e1){
   secondTrial();
 }

}catch(e2){
   thirdTrial();
}

您可能希望重新检查异常的使用。。。它们似乎并不表示异常(意外)情况……您是说您希望它在异常发生时执行某些操作,然后在
try
中继续执行其余代码?@james montagne+1即使在
f.f1()
抛出一些错误后,我也会运行
f.f2()
。但是正如jondavidjohn+1所说,我没有很好地使用
异常
概念。我不完全确定我们是否理解这个问题…@lvaro-g-vicario的想法是不要使用那么多try-catch块。但现在我明白了
异常
将控制权传递给上层。因此,如果我想在同一级别上继续流动,它没有得到很好的使用。正确!日志记录不会中断流。在现代浏览器中,您甚至可以执行诸如console.error、console.warn、console.log+1之类的操作?只是休息?将控件传递到上层,对吗?因此,在这种情况下,也许我应该调用一些方法来警告/记录错误,但不要抛出异常。对吗?你一定在考虑语法错误。如果您在
中抛出
try{}
程序流跳转到匹配的
catch{}
,不是吗?