La respuesta principal está desactualizada. Actualmente (agosto de 2012) callee está obsoleto al menos en Firefox. Usar callee está desactualizado. Actualmente (agosto de 2012) es destinatario de la llamada "... desaprobado por ECMA-262." (Ver discussion)
Hay dos problemas que se están ejecutando en:
- sólo se pasa al controlador de función del evento objeto.
- la función no se nombra, por lo que no puede hacer referencia a ella por la recursividad
Solución 2:
Este es el más fácil de los dos. Normalmente, la razón para usar funciones anónimas es mantener un espacio de nombres limpio. Los paréntesis definen un espacio de nombre local, por lo tanto, después de darle un nombre a la función, no será accesible fuera de los paréntesis. El siguiente trabajo para usted:
$('.someclass').onClick(function dosomething(){
... your code ...
dosomething() //again
});
dosomething() // will cause scope error, function not defined
Solución 1:
Esto es un poco más difícil. Como lo único que se le pasa a la función es el objeto de evento que necesitará extender para pasar los valores. Afortunadamente, resulta que jQuery tiene 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: esto es especialmente útil para cuando se debe conectar y desconectar un controlador para evitar bucles Inifinite como 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);
});
¿Sería posible obtener una muestra completa? No he podido hacer que esto funcione, aún ... – krdluzni
El sitio vinculado tiene un ejemplo de creación de una función factorial recursiva anónima. – jimr
agruments.callee estaba en desuso. ver http://stackoverflow.com/questions/103598/why-was-the-arguments-callee-caller-property-deprecated-in-javascript –