2011-01-11 2 views

Répondre

24

Oui - arguments.callee est la fonction actuelle.

NOTE: Ceci est obsolète dans ECMAScript 5 et peut provoquer une atteinte des performances pour la récursivité d'appel de fin et similaire. Cependant, cela fonctionne dans la plupart des principaux navigateurs.

Dans votre cas, f1 fonctionnera également.

+2

'arguments.callee' n'est pas le bon outil pour cette situation. Il est déconseillé dans ECMAScript 5 "mode strict", et empêche certaines optimisations par les minifieurs. –

+14

@ Box9 existe-t-il une alternative? –

+2

@DavidTang il peut être déconseillé, mais c'est la seule option disponible. Peut-être devraient-ils le désapprouver. –

8

Vous pouvez y accéder avec f1 puisque la fonction aura été affectée à la variable f1avant il est appelé:

var f1 = function() { 
    f1(); // Is valid 
}; 

f1(); // The function is called at a later stage 
+1

... ce qui est bizarre, mais utile. Ce n'est pas une réponse tout à fait appropriée à la question (avec un exemple ambigu), car George voulait se reproduire dans une fonction «anonyme». –

+2

@ Christian, ce n'est pas étrange du tout. La déclaration de fonction et l'exécution de fonction sont deux choses totalement différentes. Et je crois que ceci * est * la solution la plus correcte à la question de l'OP - 'var f1 = function() {}' est une fonction anonyme. 'La fonction f1() {}' ne l'est pas. Veuillez consulter http://stackoverflow.com/questions/103598/why-was-the-arguments-callee-caller-property-deprecated-in-javascript pour savoir pourquoi 'arguments.callee' devrait être évité. –

+1

Ah, je vois. Bizarre parce que l'objet 'Function' n'était pas entièrement construit au moment de la définition, donc (dans mon esprit) pas affecté à' f1'. Je pensais que George voulait revenir dans une fonction anonyme, disons, dans un gestionnaire d'événement JQuery ou quelque chose comme ça. –

35

le nom.

var f1 = function fOne() { 
    console.log(fOne); //fOne is reference to this function 
} 
console.log(fOne); //undefined - this is good, fOne does not pollute global context 
+4

Je me demande qui a downvoted ceci. C'est essentiellement comment on accède à la fonction actuelle dans la fonction anonyme. Et le nom est conservé même s'il est ensuite affecté à un autre objet, donc la récursion est toujours possible. – Markos

+3

Cela devrait être la bonne réponse –

+2

@ Markos - une expression de fonction avec un nom n'est plus "anonyme". ;-) – RobG

Questions connexes