2017-01-16 19 views
-1

私は本Eloquent JavaScriptを使用しています。演習の一つは、フォーマットの、リスト内のn番目の値を返す再帰関数を作成するように要求されます:JavaScriptの内部関数から外部関数への戻りの問題

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

私は以来、閲覧、著者のソリューションを理解してきた(と私は今、「私は実際にdidnの実現トン必要内部機能)が、私は私のコードが動作しない理由としてはまだ興味:!

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 

私の質問は、最初の値を探しているときに外側の関数が意図したとおりに戻りますが、他の2つのケースでは「未定義」として返されるのはなぜですか?

+0

findNumを呼び出してから戻って得るものreturnに持って

ええ、私は運動に関するいくつかの答えを見つけましたが、私は単に歩くことによって解決することができませんでした。この特定の問題 – CJ1138

+0

何も対処しないものを見ることができませんでしたそれが何をしているのかを見てデバッガのあなたのコードを通して。 –

答えて

-1

findNumオブジェクトは、if文が一致する場合にのみ値を返します。 else側で

は、それがfindNum再帰的を呼び出しますが、あなたが戻ってその呼び出しから取得の戻り値を無視します。あなたは再帰的に

+0

完璧、ありがとう! – CJ1138

関連する問題