Ich kann eine rekursive Funktion in einer Variablen wie folgt erstellen:
/* Count down to 0 recursively.
*/
var functionHolder = function (counter) {
output(counter);
if (counter > 0) {
functionHolder(counter-1);
}
}
Damit functionHolder(3);
würde ausgegeben 3
2
1
0
. Angenommen, ich habe Folgendes getan:
var copyFunction = functionHolder;
copyFunction(3);
würde 3
2
1
0
wie oben ausgeben . Wenn ich mich dann functionHolder
wie folgt geändert habe :
functionHolder = function(whatever) {
output("Stop counting!");
Dann functionHolder(3);
würde Stop counting!
wie erwartet geben.
copyFunction(3);
Jetzt gibt es, 3
Stop counting!
wie es sich bezieht functionHolder
, nicht die Funktion (auf die es selbst zeigt). Dies könnte unter bestimmten Umständen wünschenswert sein, aber gibt es eine Möglichkeit, die Funktion so zu schreiben, dass sie sich selbst aufruft und nicht die Variable, die sie enthält?
Das heißt, ist es möglich, nur die Leitung functionHolder(counter-1);
so zu ändern , dass das Durchlaufen all dieser Schritte immer noch ergibt, 3
2
1
0
wenn wir anrufen copyFunction(3);
? Ich habe es versucht, this(counter-1);
aber das gibt mir den Fehler this is not a function
.