2011-01-11 10 views

risposta

24

Sì - arguments.callee è la funzione corrente.

NOTA: Ciò è obsoleto in ECMAScript 5 e può causare un riscontro di prestazioni per ricorsione di coda e simili. Tuttavia, funziona nella maggior parte dei browser principali.

Nel tuo caso, f1 funzionerà anche.

+2

'arguments.callee' non è lo strumento giusto per questa situazione. È deprecato in ECMAScript 5 "strict mode" e impedisce determinate ottimizzazioni da parte dei minifiers. –

+14

@ Box9 c'è un'alternativa? –

+2

@DavidTang potrebbe essere deprecato, ma è l'unica opzione disponibile. Forse dovrebbero smuoverlo. –

8

È possibile accedere con f1 in quanto la funzione sarà stato assegnato alla variabile f1prima si chiama:

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

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

... che è strano, ma utile. Risposta non propriamente appropriata alla domanda (ambiguamente esemplificata), tuttavia, poiché George voleva recitare in una funzione * anonima *. –

+2

@Christian, non è affatto strano. La dichiarazione di funzione e l'esecuzione della funzione sono due cose completamente diverse. E credo che questa * sia * la soluzione più corretta alla domanda dell'OP - 'var f1 = function() {}' è una funzione anonima. 'function f1() {}' non lo è. Si prega di consultare http://stackoverflow.com/questions/103598/why-was-the-arguments-callee-caller-property-deprecated-in-javascript per il motivo che 'arguments.callee' dovrebbe essere evitato. –

+1

Ah, capisco. Stranamente perché l'oggetto 'Function' non è stato completamente costruito al momento della definizione, quindi (a mio avviso) non assegnato a' f1'. Ho pensato che George volesse recitare in una funzione anonima, ad esempio in un gestore di eventi JQuery o qualcosa del genere. –

35

Nome esso.

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

Mi chiedo chi ha svalutato questo. Questo è fondamentalmente il modo in cui si accede alla funzione corrente nella funzione anonima. E il nome viene mantenuto anche se viene assegnato a un altro oggetto, quindi la ricorsione è ancora possibile. – Markos

+3

Questa dovrebbe essere la risposta corretta –

+2

@ Markos: un'espressione di funzione con un nome non è più "anonima". ;-) – RobG

Problemi correlati