戻り値を変数に格納する必要があります。
このコードを修正する方法を知りたいです。 bの値が3の場合、value = 2になることはわかっていますが、関数が複数の反復を実行すると、識別できなくなります。コールバックなどを使用する必要があることを読みましたが、方法がわかりません。また、コードが機能しない理由と修正方法についても説明します。 (もちろん、このコードは、元のコードを表示すると混乱する可能性があるかのように、デモンストレーションを目的としています。)どうもありがとうございました!
var b = 70;
function myfunction() {
b--;
if (b < 3) {
return b;
} else {
myfunction();
}
}
value = myfunction();
console.log(value);
あなたのコード:myFunction()
は最初の呼び出しでvoid/undefined
を返します。これは再帰的なアプローチではありません。
次の例は再帰的アプローチです。再帰関数は通常、処理される引数を受け取り、最初の呼び出し元までバブル(返された)最終値を返します。
function myfunction(b){
b--;
if(b<3) return b;
else return myFunction(b);
}
再帰関数を呼び出すときは、エスケープのテストを準備する必要があります。そうしないと、無限ループに陥る可能性があります。
無限再帰の例
function badFunction(){
return badFunction();
}
// DON'T call badFunction()
再帰的な例
var b = 70;
var safety = 1000;
function myfunction(local_b) {
if(safety<0) return;
safety--;
// main task
local_b--;
if (local_b < 3) {
return local_b;
}
return myfunction(local_b);
}
var value = myfunction(b); // when b = 70, value = 2
console.log(value);
document.getElementById('value').innerHTML = value;
<span id="value">_</span>