在javascript的递归函数中使用try-catch而不是return有什么好处
我曾经看到一个递归函数,它是这样的:在javascript的递归函数中使用try-catch而不是return有什么好处,javascript,Javascript,我曾经看到一个递归函数,它是这样的: function findNode(tree) { var NODE = {}; function traverse(node) { for (var child in node.children) { if (testNode(child)) { NODE.value = child; throw NODE; } traverse(child); } }
function findNode(tree) {
var NODE = {};
function traverse(node) {
for (var child in node.children) {
if (testNode(child)) {
NODE.value = child;
throw NODE;
}
traverse(child);
}
}
try {
traverse(tree);
} catch (e) {
if (e === NODE)
return NODE.value;
}
}
这是try-catch的一个好用法吗?例如,这与返回和检查traverse()调用的值相比如何?在某些情况下,它可能会稍微快一点。我在一个transpiler中做了类似于微优化的事情,它将一些玩具语言编译成Javascript,但那是为了打破1000个调用深度的调用堆栈,Javascript不打算被人类读取。对于普通代码,我不会做任何类似的事。为了实现算法,在搜索满足
testNode
的多个节点时,使用try-catch可能不起作用。等效的“return:version相当短,可能更可读…”return-testNode(child)?child:traverse(child);
这里使用try..catch似乎没有多大意义。