函数

时间:2018-01-14 19:12:16

标签: javascript function

我有一些变量没有包含在函数中,只是在它们创建的位置之外。我知道我可以将它们作为参数传递,但我正在寻找一种更优雅的方法。

代码:

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');

2 个答案:

答案 0 :(得分:1)

问题在于,在递归调用中,您传递了n++的值。请注意,这会在增加之前传递n 的值。所以你得到一个永远不会达到路径长度的无限递归链。

取而代之的是:

        compare(newNode, n+1);

注意:pathLength的值永远不会为0.您在代码中的不同位置记录了npathLength,因此您可能会混淆另一个。 n为0.

答案 1 :(得分:0)

  

在比较函数中,PathLength被认为是0。然而   当它被称为

时它应该是3
使用pathLength声明

constpathLength的值无法更改。见

您可以使用let声明变量,并在函数内更改变量的值。