Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中从内部函数返回外部函数时出现问题_Javascript_Function_Recursion_Return - Fatal编程技术网

JavaScript中从内部函数返回外部函数时出现问题

JavaScript中从内部函数返回外部函数时出现问题,javascript,function,recursion,return,Javascript,Function,Recursion,Return,我正在阅读《雄辩的JavaScript》。其中一个练习要求您创建一个递归函数,该函数返回列表中的第n个值,格式如下: var list = {value: 10, rest: {value: 20, rest: {value: 30, rest: null}}}; 我已经看过并理解了作者的解决方案(现在我意识到我实际上并不需要一个内部函数!),但我仍然很好奇为什么我的代码不起作用: function nth(list, num){ var count = 0; function

我正在阅读《雄辩的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;
}
我已经研究了答案,我似乎做了正确的事情从内部函数返回,但是当调用外部函数时,我得到了以下结果:

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

我的问题是:为什么外部函数在查找第一个值时按预期返回,而在其他两种情况下返回为“未定义”?

findNum
对象仅在
if
语句匹配时才返回值

else
端,它递归调用
findNum
,但忽略从该调用返回的返回值


您必须
返回
递归调用
findNum

返回的内容是的,我找到了一些关于这个练习的答案,但我看不到一个解决了这个特定问题的答案。没有什么不能通过简单地在调试器中浏览代码来解决的。