我正在阅读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”?
答案 0 :(得分:-1)
findNum
语句匹配时, if
对象才返回值。
在else
方面,它会递归调用findNum
,但会忽略从该调用中返回的返回值。
您必须return
以递归方式调用findNum