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

标签 javascript recursion scope parameter-passing binary-tree

我们的讲师编写了这个函数来递归搜索 JavaScript 对象。

我的问题涉及传递到外部 isContained 函数的 leafvalue 参数的范围:根据我对变量范围的理解,内部 checkLeaf 函数已经可以访问传递到外部函数的变量。通过观察 checkLeaf 函数内访问的 leafvalue 变量,这一点是不言而喻的。

那么为什么需要将 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 函数中。

关于JavaScript:当范围已经允许访问时,为什么 checkLeaf 需要参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46703848/

相关文章:

javascript - 如何获取 svgElement 的比例?

javascript - 我可以在 TypeScript 中扩展函数吗?

Ruby 方法范围?

haskell - 编写一个构造集合的递归函数

java - 使用 BigInteger 和递归求 A 的 B 次方

php - 在多维数组 PHP/Codeigniter 中过滤可能性

javascript - 如何在循环中嵌套的函数调用中维护正确的变量范围/值

javascript - 输入从只读更改后,JQuery 日期选择器不起作用

javascript - 在 sails 中设置布局和标题

php - css 下拉菜单不适用于 iphone/ipad