这也许很明显,但是我仍然无法理解throw
和rethrow
之间的区别,以及什么时候应该使用其中两个?
答案 0 :(得分:2)
如果您决定重新引发异常,则最好使用
rethrow
语句,而不要使用throw
引发相同的异常对象。rethrow
保留该异常的原始堆栈跟踪。另一方面,throw
将堆栈跟踪重置为最后抛出的位置。
最大的区别是保留了原始堆栈跟踪。
他们提供了2个示例来显示预期的用法:
坏:
try {
somethingRisky();
} catch (e) {
if (!canHandle(e)) throw e;
handle(e);
}
好:
try {
somethingRisky();
} catch (e) {
if (!canHandle(e)) rethrow;
handle(e);
}