La risposta superiore non è aggiornata. Attualmente (agosto 2012) il callee è deprecato almeno in Firefox. L'utilizzo di callee non è aggiornato. Attualmente (ago 2012) callee è "... deprecata da ECMA-262." (Vedi discussion)
Ci sono due problemi in esecuzione in:
- il gestore di funzione verrà passato solo l'evento oggetto.
- la funzione non si chiama, quindi non è possibile fare riferimento ad esso per la ricorsione
Soluzione 2:
Questo è il più facile dei due. In genere, il motivo dell'utilizzo di funzioni anonime è quello di mantenere pulito lo spazio dei nomi. Le parentesi definiscono uno spazio dei nomi locale, quindi dopo aver assegnato alla funzione un nome non sarà accessibile al di fuori delle parentesi. Di seguito lavorerà per voi:
$('.someclass').onClick(function dosomething(){
... your code ...
dosomething() //again
});
dosomething() // will cause scope error, function not defined
Soluzione 1:
Questo è un po 'più difficile. Poiché l'unica cosa trasmessa alla funzione è l'oggetto evento, dovrai estenderlo per passare i valori. Fortunatamente, jQuery ha un sistema just for this!
$('.someclass').on('click', {myvar: 0}, function dosomething(event){
... your code ...
event.data.myvar = event.data.myvar + 1;
dosomething(event) //again
});
Nota: questo è particolarmente utile quando si deve attaccare e staccare un gestore per evitare loop Inifinite come con DOMSubtreeModified.
$('.someclass').on('DOMSubtreeModified.mynamespace', {myvar: 0}, function myfunc(event){
$(this).off('DOMSubtreeModified.mynamespace');
... Some Code that changes .someclass subtree ...
event.data.myvar = event.data.myvar + 1;
$(this).on('DOMSubtreeModified.mynamespace', {myvar: event.data.myvar}, myfunc);
});
fonte
2012-08-17 20:21:20
Sarebbe possibile ottenere un campione completo? Non sono ancora riuscito a farlo funzionare ... – krdluzni
Il sito collegato ha un esempio di creazione di una funzione fattoriale ricorsiva anonima. – jimr
agruments.callee è stato dichiarato obsoleto. vedi http://stackoverflow.com/questions/103598/why-was-the-arguments-callee-caller-property-deprecated-in-javascript –