講師がJavaScriptオブジェクトを再帰的に検索するこの関数を作成しました。JavaScript:スコープがすでにアクセスを許可している場合、checkLeafにパラメータが必要なのはなぜですか?
私の質問は、外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);
リーフが変更されるため、必ずしも外部関数に渡される値ではありません。 –
これは再帰と関係がありますか? –
ああ、リーフの値はバイナリツリーを検索するときに変更されますが、(value)の値は検索されません。 –