递归函数在第二次运行时返回undefined

时间:2017-02-12 17:11:36

标签: javascript jquery recursion

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

这是发起人:

$('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返回正确的元素, 控制台日志(在递归函数中)记录正确的对象,但是当对象返回到启动器时,控制台日志在那里给我未定义?

1 个答案:

答案 0 :(得分:0)

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

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

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

     }

做了这个伎俩