在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似乎没有多大意义。