javascript - JSTree - 为什么递归在 javascript 中停止?

javascript - JSTree - why is recursion stopped in javascript?

我尝试从树中删除一个子树(至少一个节点),所以我构建了一个递归函数:

function remove(i)
{
      tree = $('#jstree-tree').jstree(true).get_json('#', {flat:true});
      j=0;
      console.log(tree);
      while(j<tree.length)
      {
          if(tree[i].id == tree[j].parent)
          {
              remove(j);
              j--;
          }
          j++;
      }

      tree.splice(i,1);
}

但是这里的问题是递归在第一次调用后就停止了,我不知道为什么this my code

现在 j 是一个全局变量,因为没有声明 var。 因此 j 的值会影响 remove().

的其他执行

j=0; 更改为 var j=0; 可以解决此问题,但会导致无限循环。 似乎 remove() 的递归阻止了 tree 值到 $('#jstree-tree') 的反射。 为避免此问题,请在递归的外部执行 tree = ...get_json(...) 并重新使用它。

这是工作代码:

function remove(arg)
{
    tree = $('#jstree-tree').jstree(true).get_json('#', {flat:true});
    var _remove = function (i) {
        var j = 0;
        while(j < tree.length)
        {
            if(tree[i].id == tree[j].parent)
            {
                  _remove(j);
                  j--;
            }
            j++;
        }
        tree.splice(i,1);
    }
    _remove(arg);
}