Najlepsza odpowiedź jest nieaktualna. Obecnie (sierpień 2012) callee jest przestarzałe przynajmniej w Firefoxie. Program callee jest nieaktualny. Obecnie (sie 2012) wywoływany jest „... niezalecane przez ECMA-262.” (Patrz discussion)
Istnieją dwa problemy używasz do:
- handler funkcja zostanie przekazany tylko wydarzenie obiekt.
- funkcja nie jest nazwana, więc nie można się do niego dla rekursji
rozwiązanie dla 2 osób:
Jest to łatwiejsze z dwóch. Zazwyczaj powodem używania anonimowych funkcji jest utrzymywanie przestrzeni nazw w czystości. Nawiasy definiują lokalny obszar nazw, więc po nadaniu funkcji nazwa nie będzie dostępna poza nawiasami. Następujące będzie pracować dla Ciebie:
$('.someclass').onClick(function dosomething(){
... your code ...
dosomething() //again
});
dosomething() // will cause scope error, function not defined
Roztwór do 1:
To jest trochę trudniejsze. Ponieważ jedyną rzeczą przekazaną do funkcji jest obiekt zdarzenia, który trzeba rozszerzyć, aby przekazać wartości. Na szczęście okazuje się, że jQuery ma system just for this!
$('.someclass').on('click', {myvar: 0}, function dosomething(event){
... your code ...
event.data.myvar = event.data.myvar + 1;
dosomething(event) //again
});
Uwaga: jest to szczególnie przydatne, gdy trzeba podłączyć i odłączyć obsługi, aby zapobiec inifinite pętle jak z 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);
});
Czy można uzyskać kompletną próbkę? Nie udało mi się wykonać tej pracy, ale ... – krdluzni
Strona, do której prowadzi link, ma przykład tworzenia anonimowej funkcji rekurencyjnego silni. – jimr
agruments.callee został przestarzały. zobacz http://stackoverflow.com/questions/103598/why-was-targuments-callee-caller-property-deprecated-in-javascript –