JavaScript:当范围已经允许访问时,为什么checkLeaf需要参数?

时间:2017-10-12 07:28:39

标签: javascript recursion scope parameter-passing binary-tree

我们的教师编写了这个函数,以递归方式搜索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);

1 个答案:

答案 0 :(得分:1)

leaf是传递给内部函数checkLeaf的唯一变量,因为它是唯一一个在checkLeaf通过其递归调用堆栈时会发生变化的变量。变量value保持不变,因为它正在被搜索的内容,因此它也不需要传递到checkLeaf函数。