我们的讲师编写了此函数,该函数以递归方式搜索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);
最佳答案
leaf
是传递给内部函数checkLeaf
的唯一变量,因为它是在checkLeaf
遍历其递归调用堆栈时唯一会更改的变量。变量value
保持不变,因为它是要搜索的内容,因此不需要将其也传递给checkLeaf
函数。