2017-02-28 19 views
3

パラメータ "redo"がtrueに設定されているときに自分自身を呼び出す関数 "returnsTrue"を呼び出します。次に、同じ関数 "returnsTrue"を "redo"パラメータをfalseに設定して呼び出すと、trueを返したいと思います。しかし、実際には私は "未定義"にしか戻らない。自身を呼び出す関数がtrueを返さない

私は本当にここで何が起こっているか理解できない。

function returnsTrue(redo){ 
    if(redo){ 
    console.log('Restart Function'); 
    returnsTrue(false); 
    }else{ 
    console.log('It returns true'); 
    return true; 
    } 
} 

if(returnsTrue(true)){ 
    console.log('1'); 
}else{ 
    console.log('2'); 
} 

var isTrue = returnsTrue(true); 
console.log(isTrue); 
// is undefined 

チェックhttps://jsfiddle.net/8820r2ug/

+0

@Armin同期メソッドです。待機する必要はありません。 – Archer

答えて

6

ifの文には2つの支店があります。

のみにはreturnという文が含まれています。

ifelseではなく)に当たった場合、returnステートメントは存在せず、undefinedを返します。

if/elseif側にreturn文を追加する必要があります。

+0

この回答をありがとうございました!コードブロックの4行目は次のようになります。 return returnsTrue(false); –

+2

つまり、if文で 'returnsTrue(false);'の代わりに 'return returnsTrue(false);'を使います –

3

だから割り当てコールが値を返すされていないされて何が起こっているのか、それはtrueを返します関数内で呼び出しますので、あなたの割り当ては未定義終わる、そうのような関数内で関数呼び出しを戻してください:

function returnsTrue(redo){ 
    if(redo){ 
    console.log('Restart Function'); 
    return returnsTrue(false); 
    }else{ 
    console.log('It returns true'); 
    return true; 
    } 
} 

if(returnsTrue(true)){ 
    console.log('1'); 
}else{ 
    console.log('2'); 
} 

var isTrue = returnsTrue(true); 
console.log(isTrue); 
// is undefined 
関連する問題