Foros del Web » Programando para Internet » Javascript »

porque guardar una funcion en una variable

Estas en el tema de porque guardar una funcion en una variable en el foro de Javascript en Foros del Web. En estos días me encuentro realizando un validador de formularios y me he encontrado con la herramienta prototype, mootool, rico, entre otros y tratando de ...
  #1 (permalink)  
Antiguo 02/06/2008, 22:29
 
Fecha de Ingreso: enero-2008
Mensajes: 33
Antigüedad: 16 años, 3 meses
Puntos: 1
porque guardar una funcion en una variable

En estos días me encuentro realizando un validador de formularios y me he encontrado con la herramienta prototype, mootool, rico, entre otros y tratando de entender su codificación noto que guardan las funcines en variables

var ejemplo = new function() .....

Buscando en el manual de referencia estas líneas dice que "es menos eficiente ya que cada vez que es usada la variable se recompila"

Quiero saber porque la utilizan.

Agradezco a ayuda sobre este tema. NO quiero seguir codificando de la forma tradicional function ejemplo(){} sin entender el porque . si es moda o es por alguna fuerte razon
  #2 (permalink)  
Antiguo 03/06/2008, 00:25
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: porque guardar una funcion en una variable

Hay diferencias, pero el rendimiento no es la más importante.

En realidad hay 3 cosas distintas (no sólo dos como tú comentas) y cada una tiene sus matices y detalles. Hay una explicación muy buena en dev.mozilla, pero si quieres te señalo algunos detalles.
  1. Hay 3 formas de definir/declarar/crear una función:
    • Constructor
    • Declaración
    • Expresión
    Cada una de ellas hace algo ligeramente distinto y tiene sus usos.
  2. El constructor Function (con mayúscula y usando el operador new, var x = new Function("msg","alert(msg);");), crea una función a partir de una cadena. Sí es cierto que cada vez que se llama debe recompilar la cadena a una función. Precisamente ese es su uso. Imagina que construyes la función dinámicamente y el contenido de la cadena puede variar. Piensa en ello como una mezcla de eval() y la creación de una función.
  3. La expresión de función, var x = function(msg) { alert(msg); };, asigna una función a una variable. Puede ser una función anónima, como en este caso, o no (var x = function nombre(msg) { alert(msg); };) y en este segundo caso hay que saber que "nombre" sólo está visible dentro de la función.
  4. La declaración de una función, function x(msg) { alert(msg); };, es parecida a la expresión pero además define "automágicamente" una variable del mismo nombre que la función. Es decir, que es básicamente equivalente a var x = function x(msg) { alert(msg); };
  5. El detalle concreto de asignar una función a una variable, es en realidad el detalle menor. Como decía antes, al hacer function A() { ... } se crea automágicamente una variable A. Las diferencias pueden venir marcadas por el alcance (scope), según dónde declares o asignes la función (dentro de otra, en el alcance global, en un objeto literal, en un bucle...).

En general, salvo el uso del constructor Function que podemos considerar un caso aparte, la diferencia entre la declaración y la asignación de expresión, es poca, y en cuanto a rendimiento nula. Usar declaración o usar asignación de expresión es, en la mayoría de casos, una cuestión de estilo. O en todo caso, de sutiles detalles de gestión del alcance, pero como digo el rendimiento no es razón.
  #3 (permalink)  
Antiguo 03/06/2008, 00:27
 
Fecha de Ingreso: marzo-2008
Mensajes: 166
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: porque guardar una funcion en una variable

Para que en la variable se quede guardada la información que devuelva la función por ejemplo

function restar() {

resta = 10 - 5;
return resta;

}

variable = restar();

document.write(variable); // Imprimirá 5 ... ¿entiendes?
  #4 (permalink)  
Antiguo 03/06/2008, 00:46
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: porque guardar una funcion en una variable

GastoNike, no te lo tomes a mal, pero estamos hablando de algo completamente distinto. No se trata de llamar a la función.
  #5 (permalink)  
Antiguo 03/06/2008, 08:53
 
Fecha de Ingreso: enero-2008
Mensajes: 33
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: porque guardar una funcion en una variable

Muchas gracias por las respuestas, e inmediatamente me iré a leer el artículo.

Cita:
Iniciado por venkman Ver Mensaje
[*]El constructor Function (con mayúscula y usando el operador new, var x = new Function("msg","alert(msg);");), crea una función a partir de una cadena. Sí es cierto que cada vez que se llama debe recompilar la cadena a una función. Precisamente ese es su uso. Imagina que construyes la función dinámicamente y el contenido de la cadena puede variar. Piensa en ello como una mezcla de eval() y la creación de una función.
Cuando hablas de una funcion dinámica a que te refieres? me darias un ejemplo (no codigo solo un ejemplo de la cida real)

Gracias
  #6 (permalink)  
Antiguo 03/06/2008, 09:19
venkman
Invitado
 
Mensajes: n/a
Puntos:
Cuando hablo de construirla dinámicamente me refiero a que puedes construir el código en ejecución. Quiero decir, que podrías tener una situación en la que el código de la función lo tuvieras como texto o lo tuvieras que construir.

Imaginemos un momento que quieres tener una función que te devuelva otra función y según lo que le pases te devuelva una función que hace una cosa o una función que hace otra. Por ejemplo, algo como...

Código:
function dialogo(mensaje, confirm) {
    var fun = "";
    if(confirm) fun = "confirm('";
    else fun = "alert('";
    fun += mensaje + "');";
    return new Function(fun);
}
var dialogoUno = dialogo("hola",false);
var dialogoDos = dialogo("hola",true);
Ahora bien, este ejemplo es poco más que eso. Un caso así en la vida real no lo harías así. La aplicación de esto, en la vida real, es escasa y en la gran mayoría de los casos no te vas a encontrar con ello nunca. Podrías encontrar algo así si haces parsers (por ejemplo un parser de fórmulas matemáticas) o cosas de ese estilo.

Lo normal es que no lo necesites.
  #7 (permalink)  
Antiguo 03/06/2008, 09:29
 
Fecha de Ingreso: enero-2008
Mensajes: 33
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: porque guardar una funcion en una variable

Gracias. acabo de leer todo el articulo y se han aclarado mil dudas. Ahora es tiempo de practicar. Estaré escribieno nuevas dudas.

Buen día
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 14:46.