我有一些变量没有包含在函数中,只是在它们创建的位置之外。我知道我可以将它们作为参数传递,但我正在寻找一种更优雅的方法。
代码:
Tree.prototype.add = function(path){
var pathSplit = path.split('/');
//gets the length of the path
const pathLength = pathSplit.length;
//this compares the path to the nodes/directories
let compare = (currentNode, n) => {
console.log(n);
if(n == pathLength -1){
console.log(pathLength);
//create a new node with file name as data
var nodeFile = new Node(pathSplit[n]);
//adds the file name onto the the node
currentNode.children.push(nodeFile);
//sets the node parent to the currentNode
nodeFile.parent = currentNode;
}else{
//console.log('THIS IS RUN');
var newNode = () => this.traversalBF(currentNode, pathSplit[n]);
//console.log(newNode);
compare(newNode, n++);
};
};
compare(this._root, 0);
};
变量PathLength
在比较函数中被视为0
。但是当它被调用时它应该是3
:
tree.add('one/two/three');
答案 0 :(得分:1)
问题在于,在递归调用中,您传递了n++
的值。请注意,这会在增加之前传递n
的值。所以你得到一个永远不会达到路径长度的无限递归链。
取而代之的是:
compare(newNode, n+1);
注意:pathLength
的值永远不会为0.您在代码中的不同位置记录了n
和pathLength
,因此您可能会混淆另一个。 n
为0.
答案 1 :(得分:0)
使用在比较函数中,PathLength被认为是0。然而 当它被称为
时它应该是3
pathLength
声明 const
。 pathLength
的值无法更改。见
您可以使用let
声明变量,并在函数内更改变量的值。