Foros del Web » Programando para Internet » Javascript »

Funcion autoejecutable y recursiva

Estas en el tema de Funcion autoejecutable y recursiva en el foro de Javascript en Foros del Web. Como puedo definir esto de forma recursiva, pasando un parametro: mi_funcion = function(){ }(i);...

  #1 (permalink)  
Antiguo 26/02/2009, 14:03
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Funcion autoejecutable y recursiva

Como puedo definir esto de forma recursiva, pasando un parametro:

mi_funcion = function(){
}(i);
  #2 (permalink)  
Antiguo 26/02/2009, 15:05
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Funcion autoejecutable y recursiva

¿Qué? ¿Podrías explicarlo un poco más?
  #3 (permalink)  
Antiguo 26/02/2009, 15:05
Avatar de jeybi  
Fecha de Ingreso: julio-2008
Ubicación: Mexico
Mensajes: 130
Antigüedad: 15 años, 9 meses
Puntos: 10
Respuesta: Funcion autoejecutable y recursiva

Edit: pongo un ejemplo que se ilustre mejor:

Código javascript:
Ver original
  1. var anonimo = function(x) {
  2.     if (x <= 1) return 1;
  3.     //Arguments callee se refiere a la funcion en ejecucion
  4.     return x * arguments.callee(x-1);
  5. }(numero)

Esta funcion computa factoriales de lo que le pasas
  #4 (permalink)  
Antiguo 26/02/2009, 15:29
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Funcion autoejecutable y recursiva

Si sencillamente una función que se auto ejecute, y que ademas se invoque así misma varias veces pasando un parámetro, hasta un determinado punto...

mi_funcion = function(){
alert('ejecuto);
}();

Esta ya se ejecuta sola... Ahora, hace falta que lo haga desde su interior uno y otra vez hasta un determinado punto.
  #5 (permalink)  
Antiguo 26/02/2009, 15:51
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Funcion autoejecutable y recursiva

Hola:

Como ejemplo de recursión, el factorial...

function factorial(n) {
if (n > 1) return n * factorial(n - 1)
else return n;
}

Pero la otra parte no consigo captarla...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #6 (permalink)  
Antiguo 26/02/2009, 17:01
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
De acuerdo Respuesta: Funcion autoejecutable y recursiva

Hola, gracias por compartir su opinion...

veamos:

Mi problema no es hacer una función recursiva o una auto ejecutable, el problema es unificarla en una sola...Funcion autoejecutable y recursiva

Una función que automáticamente se inicie, y que una vez iniciada se procese de forma recursiva.

Digamos:

var AJX = {
Efx:function(idx,x,y,w,h){
fn = function(i){
alert('me ejecuto sola...:'+i);i++;
//if(i<=3)fn(i);//esto no funciona..no lo hace hasta que i==3
}(idx);
}
}
var obj = AJX.Efx(1,0,0,0,0);

Un saludo...
  #7 (permalink)  
Antiguo 26/02/2009, 17:16
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Funcion autoejecutable y recursiva

Hola:

Lo raro de esto es que no existe la "autoejecución en javascript"... siempre hace falta un evento o un flujo...

si pones en el body: document.write("hola"), se ejecuta por el flujo, pero cualquier otra cosa depende de algún evento...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #8 (permalink)  
Antiguo 26/02/2009, 17:19
Avatar de jeybi  
Fecha de Ingreso: julio-2008
Ubicación: Mexico
Mensajes: 130
Antigüedad: 15 años, 9 meses
Puntos: 10
Respuesta: Funcion autoejecutable y recursiva

Dices algo como... esto?
Código javascript:
Ver original
  1. var AJX = {
  2.     Efx:function(idx,x,y,w,h){
  3.         fn = function(i){
  4.             alert('me ejecuto sola...:'+i);i++;
  5.             if(i<=3)arguments.callee(i); //esto no funciona..no lo hace hasta que i==3
  6.             }(idx);
  7.         }
  8. }
  9.  
  10. var obj = AJX.Efx(1,0,0,0,0);
  #9 (permalink)  
Antiguo 27/02/2009, 02:14
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Funcion autoejecutable y recursiva

SPAWN3000, creo que si explicas un poco qué es lo que quieres lograr, a qué resultado quieres llegar quizá se entienda mejor.

Porque no sé, lo único que se me ocurre es que quieras hacer algo así:

Código javascript:
Ver original
  1. var factorialDeCinco = (function factorial(n) {
  2.     if (n > 1) return n * factorial(n - 1);
  3.     else return n;
  4. })(5);

Pero no termino de ver muy bien qué sentido tiene. Y con el ejemplo de AJX, Efx, idx, w, h, j, x... no queda muy claro tampoco.
  #10 (permalink)  
Antiguo 27/02/2009, 10:00
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Funcion autoejecutable y recursiva

Cita:
Iniciado por caricatos Ver Mensaje
Hola:

Lo raro de esto es que no existe la "autoejecución en javascript"... siempre hace falta un evento o un flujo...

si pones en el body: document.write("hola"), se ejecuta por el flujo, pero cualquier otra cosa depende de algún evento...

Saludos
Hola, que tal nuevo amigo...

Mira, si existe... yo lo hago así. por esto les había posteado el code.
Código:
<script>
fn = function(){
alert('me ejecuto sola...');
}();
</script>
<script>
//Pero lo que necesito es esto, una función auto ejecutable y recursiva, que se ejecute dentro de otra...
/*
var AJX = {
Efx:function(idx,x,y,w,h){
fn = function(i){
alert('me ejecuto sola...:'+i);i++;
//if(i<=3)fn(i);//esto no funciona..no lo hace hasta que i==3
}(idx);
}
}
var obj = AJX.Efx(1,0,0,0,0);
*/
</script>
Se que algunas veces he echo preguntas medio rebuscadas, lo siento... Pero realmente es que lo necesito.

Un saludo y gracias por seguirme la corriente.
  #11 (permalink)  
Antiguo 27/02/2009, 10:08
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Funcion autoejecutable y recursiva

Cita:
Iniciado por jeybi Ver Mensaje
Dices algo como... esto?
Código javascript:
Ver original
  1. var AJX = {
  2.     Efx:function(idx,x,y,w,h){
  3.         fn = function(i){
  4.             alert('me ejecuto sola...:'+i);i++;
  5.             if(i<=3)arguments.callee(i); //esto no funciona..no lo hace hasta que i==3
  6.             }(idx);
  7.         }
  8. }
  9.  
  10. var obj = AJX.Efx(1,0,0,0,0);
Siiipi, exactamente...ahora la pregunta... que hace arguments y callee? No los conocía...bueno de echo siendo más sincero, apenas estoy conociendo el lenguaje, pero espero hacerlo muy rápido.

Un saludo jeybi...
  #12 (permalink)  
Antiguo 27/02/2009, 10:23
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Funcion autoejecutable y recursiva

Bueno que deseo hacer: una función parametrizable compuesta 'Así podría llamarla yo, no se que termino utilizan ustedes para(función autoejecutable y recursiva)' para manejo de redimención y desplazamiento en ventanas, layer o la mayoría de elementos. (ya que todos estos procedimientos son similares)

Por q' el auto ejecutable... una vez invocada, la función externa le diga a la función interna que hacer acorde a un valor, pero ese aspecto se analiza de forma externa..así no se repite el análisis y pierde velocidad de procesamiento.

- mifunción externa configura los parámetros, y luego simplemente la función auto ejecutable amplia en ancho o alto, izq o derecha siguiendo un patron establecido por la función externa...

//Por ello (iddelelemento,poscionx,posicióny,ancho,alto)
(idx,x,y,w,h)...
//Claro, al final no es exactamente así como debe quedar...pero espero que tenga la menor cantidad de líneas posibles, Y que posteriormente se pueda heredar efectos extraídos de una clase externa. Como shadow, blur, opacity...algo si.

Un saludo, y grácias nuevamente por toda la ayuda que me han ido prestando.
  #13 (permalink)  
Antiguo 27/02/2009, 10:34
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Funcion autoejecutable y recursiva

SPAWN3000, si me permites el consejo, creo que para otra vez lo de explicar lo que quieres hacer debería ser lo primero de todo. Además, si tienes un caso concreto del uso por el que quieres hacerlo, creo que también sería buena idea ponerlo, con el código real, para que se entienda más claramente.
  #14 (permalink)  
Antiguo 27/02/2009, 10:39
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Funcion autoejecutable y recursiva

jeje, ya se que hace arguments...

simplemente crea un objeto de tipo array con los argumentos de la función.
{
arguments.callee permite a funciones anónimas referirse a ellas mismas, lo cual es necesario en funciones anónimas recursivas, haaa por eso funciona! y JavaScript 1.4: Desaconsejó callee...
ninguno de los métodos de this, permite hacer referencia a la función...(Yo lo intente infructuosamente).
Esto lo publico con el fin de que alguien mas tenga el mismo problema. aunque la solución fue sencilla.

Es un sentimiento complicado de tener algo, sin la certeza de como funciona!
}

Podría existir algún método de remplazar callee?

Un saludo.

Última edición por SPAWN3000; 27/02/2009 a las 10:44
  #15 (permalink)  
Antiguo 27/02/2009, 10:56
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
De acuerdo Respuesta: Funcion autoejecutable y recursiva

Cita:
Iniciado por venkman Ver Mensaje
SPAWN3000, si me permites el consejo, creo que para otra vez lo de explicar lo que quieres hacer debería ser lo primero de todo. Además, si tienes un caso concreto del uso por el que quieres hacerlo, creo que también sería buena idea ponerlo, con el código real, para que se entienda más claramente.
Mil disculpas VenK, concuerdo con tu propuesta... solo pensé que partiendo del título... función auto-ejecutable y recursiva(lo decía todo). Pero prometo poner más trabajo en mis preguntas...

Un saludo y gracias por el consejo.
  #16 (permalink)  
Antiguo 27/02/2009, 11:15
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Funcion autoejecutable y recursiva

Por cierto caricatos, olvide agradecerte por la herramienta destripador... sin intenciones de ofender, tu página estará algo carente de diseño pero me ha sido muy útil tu herramienta en más de una ocasión entre otras cosas...

Acertado en este requerimiento.

Un saludo.
  #17 (permalink)  
Antiguo 27/02/2009, 11:18
Avatar de jeybi  
Fecha de Ingreso: julio-2008
Ubicación: Mexico
Mensajes: 130
Antigüedad: 15 años, 9 meses
Puntos: 10
Respuesta: Funcion autoejecutable y recursiva

Cita:
Iniciado por SPAWN3000 Ver Mensaje
Siiipi, exactamente...ahora la pregunta... que hace arguments y callee? No los conocía...bueno de echo siendo más sincero, apenas estoy conociendo el lenguaje, pero espero hacerlo muy rápido.

Un saludo jeybi...

El uso de arguments esta desaconsejado solo cuando lo usamos como propiedad de una funcion, es decir;

function abc(){
abc.arguments.calle()
}

Lo que pasa es que ahora arguments es una variable local dentro de la funcion, no una propiedad de esta y puede ser utilizada como cualquier varibale local, callee y lenght son propiedades de arguments.

Con todo esto quiero decir, que no hay razon de porque no usar arguments.calle ya que en el ejemplo que posteo esta bien utilizado
  #18 (permalink)  
Antiguo 27/02/2009, 11:44
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Funcion autoejecutable y recursiva

jeybi, si lo imagine...gracias por la aclaración. Compro la idea.
  #19 (permalink)  
Antiguo 27/02/2009, 11:47
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Respuesta: Funcion autoejecutable y recursiva

Tampoco es necesario usar arguments.callee:
Código javascript:
Ver original
  1. <html>
  2. <body>
  3. <div id="log"></div>
  4. <script>
  5. (function(i){
  6.     function a(i){
  7.         document.getElementById('log').innerHTML+=i++;
  8.         if(i<10){
  9.             return a(i);
  10.         }
  11.     }
  12.     return a(i);
  13. })(0);
  14. </script>
  15. </body>
  16. </html>
  #20 (permalink)  
Antiguo 27/02/2009, 11:55
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Funcion autoejecutable y recursiva

Sensei extrañado de tu ausencia, veamos ahora con que me sorprendes...

panino, Probado tu Code y aprobado su uso... gracias por hacer parte una vez más.

Aun faltan las pruebas de rendimiento y compatibilidad y listo!

Un saludo a todos, y muchas gracias por aportar su experiencia.

Última edición por SPAWN3000; 27/02/2009 a las 12:02
  #21 (permalink)  
Antiguo 27/02/2009, 11:59
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Funcion autoejecutable y recursiva

Tenían conocimiento de que innerHTML no se comporta muy bien con otros navegadores diferentes de Iexplorer, es mejor validar el uso de DOM para otros y innerHTML sólo para IE(ya se imaginaran por es mas rápido en IE)...

Esto si les puede interesar:

<head>
<script>
function replace(e,html) {
var oldEl = (typeof e === "string" ? document.getElementById(e):e);
/*@cc_on oldEl.innerHTML = html; @*/
var newEl = oldEl.cloneNode(false);
newEl.innerHTML = html;
oldEl.parentNode.replaceChild(newEl, oldEl);
};
</script>
</head>
<body>
<a href="#" onclick="replace('texto','Fernando')">remplazar</a>
<div id="texto">Hola...</div>
</body>
  #22 (permalink)  
Antiguo 27/02/2009, 12:04
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Respuesta: Funcion autoejecutable y recursiva

Contrariamente a lo que muchos suponen, innerHTML es más rápido que DOM no sólo en explorer. Además es parte del estandar HTML5 ;)
Volviendo a lo anterior, según entiendo arguments.callee está desaconsejado siempre y no sólo bajo determinadas circunstancias (puedo estar equivocado, pero creo que así es)
  #23 (permalink)  
Antiguo 27/02/2009, 12:10
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Funcion autoejecutable y recursiva

Sensei: Se podría hacer una prueba cíclica, para salir de dudas con innerHTML y DOM en firefox...solo así se podría descartar.
  #24 (permalink)  
Antiguo 27/02/2009, 12:14
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Respuesta: Funcion autoejecutable y recursiva

Fijate: http://www.developer-x.com/content/i...perf_test.html
http://jessedearing.com/blog/develop...dom-functions/
Hay muchos test creados que lo comprueban.
  #25 (permalink)  
Antiguo 27/02/2009, 12:18
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Funcion autoejecutable y recursiva

Yo propongo este test:
correr en FF y en IE
http://stevenlevithan.com/demo/replaceHtml.html
  #26 (permalink)  
Antiguo 27/02/2009, 12:32
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Respuesta: Funcion autoejecutable y recursiva

Estos resultados lo dicen todo:
http://www.quirksmode.org/dom/innerhtml.html
  #27 (permalink)  
Antiguo 27/02/2009, 13:04
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Funcion autoejecutable y recursiva

Retornando de mi almuerzo: Y espero digerir correctamente tu propuesta.

Conocía el ultimo test que has posteado, lo había visitado hace algo de tiempo...Pero me queda la duda, en este test:

http://stevenlevithan.com/demo/replaceHtml.html

En Iexplorer:
innerHTML (destroy only): 18ms
innerHTML (create only): 67ms
innerHTML (destroy & create): 85ms
replaceHtml (destroy only): 18ms (~ same speed)
replaceHtml (create only): 68ms (~ same speed)
replaceHtml (destroy & create): 84ms (~ same speed)
Done.

En Firefox: con 10000 elementos todo comienza a cambiar:
innerHTML (destroy only): 3001ms
innerHTML (create only): 1264ms
innerHTML (destroy & create): 4426ms
replaceHtml (destroy only): 18ms (166.7x faster)
replaceHtml (create only): 102ms (12.4x faster)
replaceHtml (destroy & create): 119ms (37.2x faster)
Done.

Y el tiempo que te pone ha esperar Firefox es realmente considerable comparado con IE con la prueba de 15000 elementos... En la practica es probable que nunca se implemente la creación de 15000 elementos. Es por simple documentación.
  #28 (permalink)  
Antiguo 27/02/2009, 13:16
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Funcion autoejecutable y recursiva

Mejor me creo un testeador, y entonces podre realmente poner propuestas concretas...
  #29 (permalink)  
Antiguo 27/02/2009, 13:18
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Respuesta: Funcion autoejecutable y recursiva

Desconfío un poco de ese test. Siempre da resultados demasiado diferentes y no es muy claro cómo funciona.
  #30 (permalink)  
Antiguo 27/02/2009, 13:21
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Funcion autoejecutable y recursiva

Cita:
Iniciado por Panino5001 Ver Mensaje
Desconfío un poco de ese test. Siempre da resultados demasiado diferentes y no es muy claro cómo funciona.
También estoy invocando tu idea, al parecer el test no es tan sólido como se puede esperar ya he guardado ambas páginas y les pasare unas cuantas pruebas este fin de semana y entonces te podre contestar.

Claro que no espero gran cosa de la prueba, ya que mi tiempo de haberme enfocado más seriamente en javascript se reduce a 2 o 3 meses mas o menos...

Un saludo,

Última edición por SPAWN3000; 27/02/2009 a las 13:28
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:42.