Vous pouvez donner un nom à la fonction, même lorsque vous êtes à la création de la fonction comme une valeur et non une "déclaration de fonction". En d'autres termes:
(function foo() { foo(); })();
est une pile de soufflage en fonction récursive. Maintenant, cela étant dit, vous ne voulez probablement pas à le faire en général car il y a des problèmes bizarres avec les différentes implémentations de Javascript. (note — c'est un assez vieux commentaire; certains/beaucoup/tous les problèmes décrits dans Kangax du blog peut être fixe en plus des navigateurs modernes.)
Lorsque vous donnez un nom comme ça, le nom n'est pas visible en dehors de la fonction (bon, c'est pas censé être; c'est l'un des weirdnesses). C'est comme "letrec en Lisp.
Comme pour arguments.callee
, c'est rejetée au "strict" mode et est généralement considéré comme une mauvaise chose, car cela fait quelques optimisations dur. Il est aussi beaucoup plus lent que l'on pourrait attendre.
modifiez — le Si vous voulez avoir l'effet d'un "anonyme", fonction qui peut s'appeler lui-même, vous pouvez faire quelque chose comme ceci (en supposant que vous êtes de passage à la fonction de rappel, ou quelque chose comme ça):
asyncThingWithCallback(params, (function() {
function recursive() {
if (timeToStop())
return whatever();
recursive(moreWork);
}
return recursive;
})());
Ce qui n'est de définir une fonction avec une belle, coffre-fort, non-cassé-dans-IE de la fonction de déclaration en déclaration, la création d'une fonction locale dont le nom ne sera pas polluer l'espace de noms global. Le wrapper (vraiment anonyme) la fonction renvoie simplement que la fonction locale.