2017-02-28 4 views
3

Ich rufe eine Funktion "returnsTrue" auf, die sich aufruft, wenn der Parameter "redo" auf "true" gesetzt ist. Dann erinnere ich mich an die gleiche Funktion "returnsTrue" mit Parameter "redo" auf false gesetzt und ich möchte wahr zurückgeben. Aber eigentlich bekomme ich nur "undefined" zurück.Funktion, die sich selbst aufruft, gibt nicht zurück

ich nicht wirklich verstehen, was hier vor sich geht:

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 

prüfen https://jsfiddle.net/8820r2ug/

+0

@Armin es ist eine synchrone Methode - keine Wartezeit ist erforderlich. – Archer

Antwort

6

Es gibt zwei Zweige zum if Aussage.

Nur ein dieser beiden Zweige enthält eine return Anweisung.

Wenn es die if (und nicht die else) trifft, gibt es keine return Anweisung und es gibt undefined zurück.

Sie müssen eine return Anweisung an die if Seite der if/else hinzufügen.

+0

Vielen Dank für diese Antwort! Zeile 4 im Codeblock sollte lauten: return returnsTrue (false); –

+2

Mit anderen Worten verwenden Sie 'return returnsTrue (false);' anstelle von 'returnsTrue (false);' in if-Anweisung –

3

Also, was passiert ist, die Zuordnung Anruf Wert nicht zurückkehrt, es ist der Anruf innerhalb der Funktion, das ist wahr Rückkehr, so dass Ihre Zuordnung nicht definiert landet, versuchen Sie den Funktionsaufruf wie so innerhalb der Funktion Rückkehr:

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 
Verwandte Themen