Posso criar uma função recursiva em uma variável assim:
/* Count down to 0 recursively.
*/
var functionHolder = function (counter) {
output(counter);
if (counter > 0) {
functionHolder(counter-1);
}
}
Com isso, functionHolder(3);daria saída 3 2 1 0. Digamos que eu fiz o seguinte:
var copyFunction = functionHolder;
copyFunction(3);produziria 3 2 1 0como acima. Se eu mudar da functionHolderseguinte forma:
functionHolder = function(whatever) {
output("Stop counting!");
Então functionHolder(3);daria Stop counting!, conforme o esperado.
copyFunction(3);agora dá 3 Stop counting!como se refere functionHolder, não a função (para a qual ele mesmo aponta). Isso pode ser desejável em algumas circunstâncias, mas há uma maneira de escrever a função de modo que ela se chame a si mesma em vez da variável que a contém?
Ou seja, é possível mudar apenas a linha functionHolder(counter-1);para que passando por todas essas etapas ainda dê 3 2 1 0quando ligamos copyFunction(3);? Eu tentei, this(counter-1);mas deu um erro this is not a function.