Je peux créer une fonction récursive dans une variable comme ceci:
/* Count down to 0 recursively.
*/
var functionHolder = function (counter) {
output(counter);
if (counter > 0) {
functionHolder(counter-1);
}
}
Avec cela, functionHolder(3);
sortirait 3
2
1
0
. Disons que j'ai fait ce qui suit:
var copyFunction = functionHolder;
copyFunction(3);
produirait 3
2
1
0
comme ci-dessus. Si j'ai ensuite changé functionHolder
comme suit:
functionHolder = function(whatever) {
output("Stop counting!");
Puis functionHolder(3);
donnerait Stop counting!
, comme prévu.
copyFunction(3);
donne maintenant 3
Stop counting!
comme il se réfère functionHolder
, pas la fonction (à laquelle il pointe lui-même). Cela pourrait être souhaitable dans certaines circonstances, mais y a-t-il un moyen d'écrire la fonction de sorte qu'elle s'appelle elle-même plutôt que la variable qui la contient?
Autrement dit, est-il possible de changer uniquement la ligne de functionHolder(counter-1);
sorte que passer par toutes ces étapes donne encore 3
2
1
0
lorsque nous appelons copyFunction(3);
? J'ai essayé this(counter-1);
mais cela me donne l'erreur this is not a function
.