Posso creare una funzione ricorsiva in una variabile in questo modo:
/* Count down to 0 recursively.
*/
var functionHolder = function (counter) {
output(counter);
if (counter > 0) {
functionHolder(counter-1);
}
}
Con questo, functionHolder(3);
produrrebbe 3
2
1
0
. Diciamo che ho fatto quanto segue:
var copyFunction = functionHolder;
copyFunction(3);
risulterebbe 3
2
1
0
come sopra. Se poi ho cambiato functionHolder
come segue:
functionHolder = function(whatever) {
output("Stop counting!");
Quindi functionHolder(3);
darebbe Stop counting!
, come previsto.
copyFunction(3);
ora dà 3
Stop counting!
come si riferisce functionHolder
, non la funzione (che essa stessa indica). Ciò potrebbe essere desiderabile in alcune circostanze, ma esiste un modo per scrivere la funzione in modo che richiami se stessa anziché la variabile che la contiene?
Cioè, è possibile cambiare solo la linea in functionHolder(counter-1);
modo che il passaggio attraverso tutti questi passaggi dia ancora 3
2
1
0
quando chiamiamo copyFunction(3);
? Ho provato this(counter-1);
ma questo mi dà l'errore this is not a function
.