gpt4 book ai didi

JavaScript 作用域(递归)——参数值在没有显式声明的情况下被返回值覆盖

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:53:22 24 4
gpt4 key购买 nike

我对有序树遍历的第一个解决方案是利用递归函数调用的返回值:

BST.prototype.inOrder = function(node, array){
if(!node){ return []; }
if(!array){ array = []; }

return this.inOrder(node.left).concat([node.val], this.inOrder(node.right))

}

但后来我看到它也可以用下面的代码解决,我对“数组”值是如何被持久化感到困惑的。

BST.prototype.inOrder = function(node, array){
if(!node){ return []; }
if(!array){ array = []; }
this.inOrder(node.left, array);
array.push(node.val);
this.inOrder(node.right, array)
return array
}

当第一个递归函数调用返回时,它是否覆盖了该函数范围内的数组值?为什么要这样做?

最佳答案

这是一个重载函数,在第一次调用时将在没有第二个参数的情况下调用,在这种情况下,变量会用一个空数组初始化。一个更好的写法可能是

BST.prototype.appendInOrder = function(node, array) {
if (!node) return;
this.appendInOrder(node.left, array);
array.push(node.val);
this.appendInOrder(node.right, array);
}
BST.prototype.inOrder = function(node) {
var array = [];
this.appendInOrder(node, array);
return array;
}

关于JavaScript 作用域(递归)——参数值在没有显式声明的情况下被返回值覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44442592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com