Javascript 是否可以只使用一个try-catch块捕获多个异常?
在此javascript代码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)
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{}
,不是吗?