Ah ... las formas funcionales de recursión .... [[[flashback a clase de ciencia ficción]]]
Se podría utilizar una función auxiliar:
function X(f) { return f.apply(this, arguments); }
X(function(me, n) { return n<=1 ? n : n*me(me,n-1); }, 6);
(que devuelve 720; esta es la función factorial, el ejemplo canónico de recursión)
Esto podría a su vez ser anónimos:
(function (f) { return f.apply(this, arguments); })(
function(me, n) { return n<=1 ? n : n*me(me,n-1); },
6);
o especializada para funciones de un argumento, para evitar apply
y arguments
:
(function (f,x) { return f(f,x); })(
function(me, n) { return n<=1 ? n : n*me(me,n-1); },
6);
(los cuales también devuelven 720)
Este truco de usar una función auxiliar permite que su función reciba su elfo como su primer argumento, y por lo tanto se llama a sí mismo.
adaptar su ejemplo:
(function (f,x) { return f(f,x); })(
function(me, i) { console.log(i); if (i<5) me(me,i+1); },
0)
que funciona como se espera en Firebug (0,1,2,3,4,5 registros de consola)
Lo mejor ** que hacer es que no sea una función anónima, sino una función definida con una declaración de declaración de función. – Pointy