我们的教师编写了这个函数,以递归方式搜索JavaScript对象。
我的问题涉及传递到外部leaf
函数的value
和isContained
参数的范围:根据我对变量范围的理解,内部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);
答案 0 :(得分:1)
leaf
是传递给内部函数checkLeaf
的唯一变量,因为它是唯一一个在checkLeaf
通过其递归调用堆栈时会发生变化的变量。变量value
保持不变,因为它正在被搜索的内容,因此它也不需要传递到checkLeaf
函数。