2017-01-16 112 views
-1

我正在通過Eloquent JavaScript這本書。其中一個練習要求你創建一個列表中返回第n個值的遞歸功能,格式爲:在JavaScript中從內部函數返回外部函數的問題

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

得到的是什麼呀,我發現關於鍛鍊的幾個答案,但我看不出一個解決這方面的問題 – CJ1138

+0

沒有什麼,不能簡單地走來解決通過調試器中的代碼觀察它的功能。 – 2017-01-16 12:06:02

回答

-1

findNum只有當if語句匹配時,對象纔會返回值。

else一側,它遞歸調用findNum,但忽略從該調用返回的返回值

你必須return你從遞歸調用findNum

+0

完美,謝謝! – CJ1138

相關問題