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 0jak powyżej. Jeśli potem zmieniłem functionHolderw 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 0gdy dzwonimy copyFunction(3);? Próbowałem, this(counter-1);ale to daje mi błąd this is not a function.