javascript函数返回未定义的值,即使值显示在console.log中

javascript函数返回未定义的值,即使值显示在console.log中,javascript,Javascript,我遇到了一个非常恼人的问题,每次函数返回一个未定义的值,即使console.log总是在进入第一个if语句时显示有一个值 这是我的职责 function getElementIdentifier(elem, domSelector) { if(elem.getAttribute('id') !== null) { console.log('here'); return elem.id + ' ' + domSelector; } else {

我遇到了一个非常恼人的问题,每次函数返回一个未定义的值,即使console.log总是在进入第一个if语句时显示有一个值

这是我的职责

function getElementIdentifier(elem, domSelector) {
    if(elem.getAttribute('id') !== null) {
        console.log('here');

        return elem.id + ' ' + domSelector;
    } else {
        getElementIdentifier(elem.parentNode, elem.tagName + ' ' + domSelector);
    }
}
这就是我所说的

getElementIdentifier(elem, '');
这里有一把小提琴来复制它。谢谢@adeneo

嗯。。。试试这个:

function getElementIdentifier(elem, domSelector) {
 if(elem.getAttribute('id') !== null) {
    console.log('here');

    return elem.id + ' ' + domSelector;
 } else {
 //return the recursion returned value (sounds like inception) but
 //you are expecting a value from this function... 
    return getElementIdentifier(elem.parentNode, elem.tagName + ' ' + domSelector);
 }
}  
嗯。。。试试这个:

function getElementIdentifier(elem, domSelector) {
 if(elem.getAttribute('id') !== null) {
    console.log('here');

    return elem.id + ' ' + domSelector;
 } else {
 //return the recursion returned value (sounds like inception) but
 //you are expecting a value from this function... 
    return getElementIdentifier(elem.parentNode, elem.tagName + ' ' + domSelector);
 }
}  

如果以自递归方式调用,则函数不会返回值。您应该将return语句添加到算法的另一个分支中

function getElementIdentifier(elem, domSelector) {
    if(elem.getAttribute('id') !== null) {
        return elem.id + ' ' + domSelector;
    } else {
        return getElementIdentifier(elem.parentNode, elem.tagName + ' ' + domSelector);
    }
} 

如果以自递归方式调用,则函数不会返回值。您应该将return语句添加到算法的另一个分支中

function getElementIdentifier(elem, domSelector) {
    if(elem.getAttribute('id') !== null) {
        return elem.id + ' ' + domSelector;
    } else {
        return getElementIdentifier(elem.parentNode, elem.tagName + ' ' + domSelector);
    }
} 

您错过了第二个分支中的返回状态,您检查了elem.getAttribute'id',但尝试返回elem.id-do next return+elem.id+''+domSelector;似乎工作正常->@null元素正在传入parametr@VasilVanchuk我在调用它自己,所以不需要返回这个。为什么它会返回递归的结果,如果在下一次迭代中满足条件,它将返回一些内容。您在第二个分支中错过了返回状态,并且您检查了elem.getAttribute'id',但尝试返回elem.id-do next return+elem.id+''+domSelector;似乎工作正常->@null元素正在传入parametr@VasilVanchuk我在调用它自己,所以不需要返回这个。为什么它会在递归时返回结果,如果在下一次迭代中满足条件,它会返回一些东西。