在JavaScript

时间:2017-01-16 11:48:19

标签: javascript function recursion return

我正在阅读Eloquent JavaScript这本书。其中一个练习要求您创建一个递归函数,该函数返回列表中第n个值,格式为:

var list = {value: 10, rest: {value: 20, rest: {value: 30, rest: null}}};

我已经查看并理解了作者的解决方案(我现在意识到我实际上并没有需要内部函数!)但是我仍然很好奇为什么我的代码没有工作:

function nth(list, num){
    var count = 0;
    function findNum(node){
        if(count == num){
            var result = node.value;
            console.log("From inner function: " + result);
            return result;
        }else {
            node = node.rest;
            count++
            findNum(node);
        }
    }
    var output = "From outer function: " + findNum(list);
    return output;
}

我已经研究了答案here,我似乎做了正确的事情从内部函数返回,但是当调用外部函数时我得到以下结果:

console.log(nth({value: 10, rest: {value: 20, rest: {value: 30, rest: null}}}, 0));
//From inner function: 10
//From outer function: 10

console.log(nth({value: 10, rest: {value: 20, rest: {value: 30, rest: null}}}, 1));
//From inner function: 20
//From outer function: undefined

console.log(nth({value: 10, rest: {value: 20, rest: {value: 30, rest: null}}}, 2));
//From inner function: 30
//From outer function: undefined

我的问题是:为什么外部函数在查找第一个值时按预期返回,但在另外两个情况下返回为“undefined”?

1 个答案:

答案 0 :(得分:-1)

仅当findNum语句匹配时,

if对象才返回值。

else方面,它会递归调用findNum ,但会忽略从该调用中返回的返回值

您必须return以递归方式调用findNum

取回的内容