Javascript 递归函数在第二次运行时返回未定义的

Javascript 递归函数在第二次运行时返回未定义的,javascript,jquery,recursion,Javascript,Jquery,Recursion,我有一个递归函数,它在我的对象(带子对象的嵌套对象)上运行,它返回一个对象作为结果(它应该运行),但是当在另一个函数中调用该函数时,第二次运行该函数时,它返回未定义的 这是发起者: $('a').click(function(){ if($(this).hasClass('open')){ return null; } console.log(this); var parentId = $(this).attr('id'); var chi

我有一个递归函数,它在我的对象(带子对象的嵌套对象)上运行,它返回一个对象作为结果(它应该运行),但是当在另一个函数中调用该函数时,第二次运行该函数时,它返回未定义的

这是发起者:

$('a').click(function(){
    if($(this).hasClass('open')){
        return null;
    }
    console.log(this);
    var parentId = $(this).attr('id');
    var children = searchForChildrenByParentId(currentParentObject, parentId);
    console.log(children);
    if(children){
        var ul = $(this).children();
        children.forEach(function(child){
            var li = addLi(child);
            applyLiToUl(ul, li);
            init();
        })
    }
    $(this).addClass('open');
})
和递归函数:

function searchForChildrenByParentId(obj, stack){
    for (var property in obj) {
        if (property == "id") {
            if(obj.id == stack ){
                console.log(obj.children);
                return obj.children;
            } else if (obj.hasOwnProperty("children")){
                obj.children.forEach(function(child){
                    searchForChildrenByParentId(child, stack);
                })
            } else {
                return null;
            }
        }
    }
}
递归函数完成了它应该完成的工作,工作得很好,启动器也可以工作(在第一次运行时)

启动器中的第一个console.log返回正确的元素,
控制台日志(在递归函数中)记录了正确的对象,但是当对象返回到启动器时,控制台日志给了我一个未定义的对象?

好的,所以问题是我对递归的理解,即使函数给了我正确的对象,递归仍在继续,因此返回了一个未定义的对象。我所做的是将递归的结果分配给一个全局变量,并将该变量用于我的下一个任务

     var childOfParentObject; //outside the function - in global scope

     if(obj.id == stack ){
        console.log(obj.children);
        obj.children = childOfParentObject;
        return childOfParentObject;  

     }

在“children”的情况下,没有返回任何东西(好吧,
未定义的
被返回),因为没有
return
语句。@Pointy不确定我是否理解正确,但如果你说的是递归函数,它应该在整个对象上运行,直到找到与stack相等的object.id(某些id)并且该语句是必需的,因此这是唯一返回object的语句什么是
currentParentObject