私は本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つのケースでは「未定義」として返されるのはなぜですか?
findNum
を呼び出してから戻って得るものreturn
に持ってええ、私は運動に関するいくつかの答えを見つけましたが、私は単に歩くことによって解決することができませんでした。この特定の問題 – CJ1138
何も対処しないものを見ることができませんでしたそれが何をしているのかを見てデバッガのあなたのコードを通して。 –