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
?