我需要澄清try块如何与递归一起工作。
说我有一个名为thisFunction
的函数,其结构如下:
thisfunction()
{
if (...)
{
//...
}
else
{
if()
{
try {
thisFunction()
}
catch(...) {
throw exception()
}
//...
}
}
}
}
在运行时,如果程序进入
try
,会发生什么?如果
thisFunction()
碰巧重新运行并再次落入catch
块中,它会在转到try
之前运行一次吗?甚至会去
catch(...)
吗? 最佳答案
递归仍然是一个函数调用,就像碰巧是一个调用自身的函数一样。
调用下一个迭代时,每次对thisFunction()
的调用都有其自己的try/catch
块。如果thisFunction()
的任何迭代均引发异常,则该异常将按预期被最匹配的catch
块捕获。
如果那恰好是上一个catch
迭代的thisFunction()
,则该迭代的catch
将抛出一个新异常,该异常将像其他任何异常一样进行处理。对于thisFunction
的多次迭代,将继续捕获并引发异常,直到最终异常摆脱了初始thisFunction()
调用为止,并且是否捕获还是取决于第一次启动thisFunction()
的代码来启动递归。