2012-05-22 26 views
13

he leído en muchos lugares que puedes funciones de auto lanzamiento js en la carga haciendo:Ejecutar automáticamente las funciones de javascript Y llamarlas más tarde?

$(function() { 
    // code... 
}); 

O

var myFunc = function() { 
    // code... 
}(); 

Mi pregunta es, ¿cómo llamar a estas funciones más adelante? Debido a que la declaración simple

function myFunc() { 
    // code... 
} 

se puede recuperar fácilmente pero no se inicia automáticamente. Tengo que llamarlos manualmente todos a la carga, y eso es molesto, ocupar espacios en el código y puede ser una fuente de error si olvidé uno.

Si usted no entiende mis explicaciones, he aquí un ejemplo:

Tengo un "peso" y un campo de "altura" en mi forma, y ​​tengo que calcular el IMC (Índice de Masa Corporal). Cuando se carga la página, la base de datos llena el peso y la altura, luego se inicia el cálculo cuando todo está listo. Pero más tarde, si el usuario cambia el peso o la altura, el BMI debe volver a calcular inmediatamente. ¿Cuál es la mejor manera de hacer eso? Usando jquery o JS puro, no me importa.

Gracias.

Respuesta

22

A reusable immediate function

var reference = (function thename(){ 

    //function body 

    return thename; //return the function itself to reference 

}()); //auto-run 


reference(); //call it again 
reference(); //and again 

Tenga en cuenta que llamar a la función devuelve una referencia a la función que acaba de llamar.

var anotherReference = reference(); //anotherReference === reference 
+1

reference(); // ¡y otra vez! –

+0

Exactamente lo que estaba buscando, ¡gracias! – Willy

+0

¿Importa si "referencia" y "nombre" son lo mismo? – Willy

-2

este código:

var myFunc = function() { 
     // code... 
    }(); 

no se ejecutará en el documento preparado, que va a ejecutar el momento en el navegador analiza el archivo. Ahora bien, si esto es todavía bien con usted, a continuación, puede llamar a esta función una vez más haciendo:

myFunc(); 

Tan simple como eso ....

ayuda eso?

+0

El archivo se analiza después de que DOM se haya cargado (coloque la declaración al final del código HTML). Pero obtengo un "myFunc() no es una función" cuando hago eso. – Willy

+0

Tienes razón, mi respuesta es incorrecta. "myFunc" en realidad contiene el valor de retorno de su función anónima. – Deleteman

Cuestiones relacionadas