【发布时间】:2018-03-24 01:13:53
【问题描述】:
我们的讲师编写了这个递归搜索 JavaScript 对象的函数。
我的问题涉及传递给外部isContained 函数的leaf 和value 参数的范围:根据我对变量范围的理解,内部checkLeaf 函数已经可以访问传递给外功能。在观察leaf 和value 变量在checkLeaf 函数内被访问时,这是不言而喻的。
那么为什么需要将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);
【问题讨论】:
-
因为叶子改变了——它并不总是传递给外部函数的值。
-
好的,所以这与递归有关?
-
运行它-调试它。用铅笔和纸玩电脑。
-
正确-您要搜索的值不会改变,因此不需要传递原始包含的值。它可能是,如果
checkLeaf函数自己执行,它就需要是(例如,如果您希望能够单独测试它)。 -
@Sean -- 是的,这对其他人非常有用。但是,该问题已在 Stack Overflow 上处理过多次。我不知道另一个解释实例会改善档案。
标签: javascript recursion scope parameter-passing binary-tree