我们的讲师编写了此函数,该函数以递归方式搜索JavaScript对象。

我的问题与传递给外部leaf函数的valueisContained参数的范围有关:根据我对变量范围的理解,内部checkLeaf函数已经可以访问传递给外部函数的变量。在观察leaf函数中同时访问valuecheckLeaf变量时,这是显而易见的。

那么,为什么需要将leaf传递给checkLeaf?此外,如果要传递参数,那么为什么也只leaf而不是value,因为显然两者都是从内部函数中访问的?

const isContained = function(leaf, value) {
  function checkLeaf(leaf) {

    if (leaf.value === value) {
      return true;
    }
    if (leaf.left && leaf.value > value) {
      return checkLeaf(leaf.left);
    }
    if (leaf.right) return checkLeaf(leaf.right);
    return checkLeaf(leaf);
  }
}

isContained(binarySearchTree, 6);

最佳答案

leaf是传递给内部函数checkLeaf的唯一变量,因为它是在checkLeaf遍历其递归调用堆栈时唯一会更改的变量。变量value保持不变,因为它是要搜索的内容,因此不需要将其也传递给checkLeaf函数。

10-07 14:37