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 0comme ci-dessus. Si j'ai ensuite changé functionHoldercomme 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 0lorsque nous appelons copyFunction(3);? J'ai essayé this(counter-1);mais cela me donne l'erreur this is not a function.