Mogę utworzyć funkcję rekurencyjną w zmiennej takiej jak ta:
/* Count down to 0 recursively.
*/
var functionHolder = function (counter) {
output(counter);
if (counter > 0) {
functionHolder(counter-1);
}
}
Dzięki temu functionHolder(3);
wyjdzie 3
2
1
0
. Powiedzmy, że wykonałem następujące czynności:
var copyFunction = functionHolder;
copyFunction(3);
wyświetli się 3
2
1
0
jak powyżej. Jeśli potem zmieniłem functionHolder
w następujący sposób:
functionHolder = function(whatever) {
output("Stop counting!");
Wtedy functionHolder(3);
dał Stop counting!
, zgodnie z oczekiwaniami.
copyFunction(3);
teraz podaje 3
Stop counting!
to, do czego się odnosi functionHolder
, a nie funkcję (na którą sama wskazuje). Może to być pożądane w pewnych okolicznościach, ale czy istnieje sposób na napisanie funkcji tak, aby wywoływała samą siebie, a nie zmienną, która ją przechowuje?
To znaczy, czy można zmienić tylko linię functionHolder(counter-1);
, aby przejście przez wszystkie te kroki nadal dawało, 3
2
1
0
gdy dzwonimy copyFunction(3);
? Próbowałem, this(counter-1);
ale to daje mi błąd this is not a function
.