我们的讲师编写了这个函数来递归搜索 JavaScript 对象。
我的问题涉及传递到外部 isContained
函数的 leaf
和 value
参数的范围:根据我对变量范围的理解,内部 checkLeaf
函数已经可以访问传递到外部函数的变量。通过观察 checkLeaf
函数内访问的 leaf
和 value
变量,这一点是不言而喻的。
那么为什么需要将 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/