Ich spielte mit einigen rekursiven Programmierung. Ich habe eine Variable, um meine Tiefe zu verfolgen (d). Das Konsolenprotokoll zeigt mir, wo sich das Programm gerade befindet.Probleme mit Variablen in rekursive Programmierung in Javascript
var Test = function(){
\t this.rekursiv = function(d){
\t \t this.d = d;
\t \t console.log("case 1 granted, d: " + this.d); \t \t
\t \t if(this.d < 3) \t {
\t \t console.log("going deeper..");
\t \t this.rekursiv(this.d + 1);
\t \t console.log("going back.."); \t \t
\t \t }
\t \t console.log("d: " + this.d );
\t \t }
} \t
t = new Test();
t.rekursiv(0);
Hier ist mein Problem: Immer, wenn ich eine Ebene tiefer gehen, ich "this.d + 1" auf das nächste Level zu kommen. Howeverver, Debuggen des Codes (mit der console.log) zeigt, dass d nicht nur in einer Ebene/Tiefe, sondern in jeder Ebene/Tiefe geändert wird.
Warum ist das so? Wie kann ich verhindern, dass der Code dies tut?
'this.d' ist keine Variable. Es ist eine Eigenschaft für ein Objekt, bei dem es sich um dasselbe Objekt handelt, das im rekursiven Aufruf als Wert von this verwendet wird. Es gibt keinen Grund für eine separate Variable in Ihrem Code, da Sie bereits den Parameter "d" haben. –
Sie können es so schreiben: 'Funktion Test (d) {wenn (d <3) {console.log (d); Test (d + 1); console.log (d)} else console.log ("Basisfall")} '. Das Problem mit Ihrer Funktion ist, dass es nichts zurückgibt. Der Basisfall führt nur einen Nebeneffekt aus ('console.log'). – ftor