【问题标题】:Trouble returning from inner to outer function in JavaScript在 JavaScript 中从内部函数返回到外部函数时出现问题
【发布时间】:2017-05-31 06:04:52
【问题描述】:

我正在阅读 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

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

【问题讨论】:

  • 是的,我找到了一些关于该练习的答案,但我找不到解决这个特定问题的答案
  • 没有什么不能通过简单地在调试器中遍历您的代码并观察它的作用来解决的。

标签: javascript function recursion return


【解决方案1】:

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

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

你必须 return 递归调用 findNum 得到的结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多