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
0
como acima. Se eu mudar da functionHolder
seguinte 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
0
quando ligamos copyFunction(3);
? Eu tentei, this(counter-1);
mas deu um erro this is not a function
.